不支持lambda 表达式,lambda表达式可以用来声明
目录
使用Lambda表达式的Lambda表达式的省略号模式关于Lambda的注释使用Lambda表达式和匿名内部类之间的区别
Lambda表达式的使用
练习:
定义一个接口flyable,其中定义了一个抽象方法void fly(String s s),定义了一个测试类flyabledemo。在test类中,提供了两个方法,一个是useFlyable(Flyable f)。
Main方法,在其中调用useflyable方法。
包演示16;公共接口Flyable { void fly(String s);}包Demo16导入com . sun . XML . internal . ws . API . model . wsdl . wsdl output;public class Flyable demo { public static void main(String[]args){ use Flyable(new Flyable(){ @ Override public void fly(String s){ system . out . println(s);System.out.println(飞机上路);} });system . out . println(-);use flyable((String s)-{ system . out . println(s);System.out.println(飞机上路);});}私有静态Void使用Flyable (Flyable F) {F. Fly(晴天,晴空);} }练习2
定义一个接口(Addable),其中定义了一个抽象方法,int add(int x,int y)定义了一个测试类(AddableDemo),其中提供了一个方法是:使用addable (addable)的两个方法。
一个主要方法是在main方法中调用useAddable方法。
包演示17;公共接口Addable { int add(int x,int y);}包Demo17class addable demo { public static void main(string[]args){//调用useAddable方法useaddable ((int x,int y)-{ return x y;)//简化的重写方法可以看做});}私有静态void use Addable(Addable a){ int sum=a . add(10,20);system . out . println(sum);}}
Lambda表达式的省略模式
省略规则:
Type可以省略,但是当有多个参数时,只有一个不能省略。如果只有一个参数,那么括号可以省略。如果代码块中只有一条语句,可以省略大括号、分号甚至return。包演示17;class addable demo { public static void main(string[]args){//调用main方法中的useAddable方法//useaddable ((int x,int y)-{//return x y);//简化的重写方法可以看作//参数的类型,//useAddable((x,y)-{//return x y;//});////虽然可以省略类型,但是在有多个参数的情况下,只能省略一个//use flyable((string s)-{//system . out . println(s));//});//如果参数有
且仅有一个,小括号可以省略// useFlyable( s -> {// System.out.println(s);// }); //如果代码块的语句只有一条,可以省略大括号和分号 useFlyable( s -> System.out.println(s)); //useAddable( (x,y) -> return x+y);//如果有return,return也要省略,只针对代码块只有一条的情况 useAddable( (x,y) -> x+y); } private static void useAddable(Addable a){ int sum = a.add(10, 20); System.out.println(sum); } private static void useFlyable(Flyable f){ f.fly("风和日丽,晴空万里"); }}
Lambda使用注意事项
使用Lambda必须要有接口,并且接口中有且仅有一个抽此昂方法必须有上下文环境,才能推导出lambda对应接口根据局部变量的赋值得知lambda对应的接口:Runnable r = () -> System.out.println("lambda表达式");
根据调用方法的参数得知lambda对应的接口:new Thread( () -> System.out.println("lambda表达式")).start();
package Demo18;public class LambdaDemo { public static void main(String[] args) {// useInter( () -> {// System.out.println("好好学习,天天向上");// }); //使用Lambda必须要有接口,并且接口有且仅有一个抽象方法 useInter( () -> System.out.println("好好学习,天天向上")); //必须要有上下文华宁,才能推导出lambda对应接口// new Thread(new Runnable() {// @Override// public void run() {// System.out.println("匿名内部类");// }// }); Runnable r = () -> System.out.println("lambda表达式"); new Thread(r).start(); new Thread( () -> System.out.println("lambda表达式")).start(); } private static void useInter(Inter i ){ i.show(); }}
Lambda表达式和匿名内部类的区别
所需类型不同:
匿名内部类:可以是接口,也可以是抽象类,还有可以是具体类lambda表达式:只能是接口使用限制不同:
如果接口中有且仅有一个抽象方法,可以使用lambda表达式,也可以使用匿名内部类如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用lambda比表达式实现原理不同:
匿名内部类:编译之后,产生一个单独的.class字节码文件lambda表达式:编译之后,没有一个单独的.class文件,对应哪个的字节码会在运行的时候动态生成
package Demo19;public class LambdaDemo { public static void main(String[] args) {////匿名内部类,接口可以使用多个抽象方法// useInter(new Inter() {// @Override// public void show1() {// System.out.println("接口");// }// public void show2() {// System.out.println("接口");// }// });// useAnimal(new Animal() {// @Override// public void method() {// System.out.println("抽象类");// }// });// useStudent(new Student(){// @Override// public void study(){// System.out.println("具体类");// }// }); //lambda,接口有且仅有一个抽象方法 // useInter( () -> System.out.println("接口")); //useAnimal(() -> System.out.println("接口")); // useStudent(() -> System.out.println("具体类")); //使用lambda的地方参数必须是一个接口(有且只有一个) } private static void useStudent(Student s ){s.study();} private static void useAnimal(Animal a ){a.method();} private static void useInter(Inter i ){i.show1();i.show2();}}
到此这篇关于Lambda表达式的使用及注意事项的文章就介绍到这了,更多相关Lambda表达式 内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。