Java多线程详解(三)由繁入简推导Lambda表达式
为什么要使用Lambda表达式?
-
避免匿名内部类定义过多 可以让你的代码看起来很简洁 去掉了一堆没有意义的代码,只留下核心的逻辑 理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在 函数式接口的定义 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口 对于函数式接口,我们可以通过lambda表达式来创建接口的对象
Lambda表达式的推导(由繁入简,体会lambda表达式的魅力)
一、用普通类实现接口
package ThreadTest; public class TestLambda { public static void main(String[] args) { ILike iLike = new Like(); iLike.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); } //实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("I like Lambda!"); } }
二、静态内部类
package ThreadTest; public class TestLambda { public static void main(String[] args) { ILike iLike = new Like(); iLike.lambda(); } //静态内部类 static class Like implements ILike{ @Override public void lambda() { System.out.println("I like Lambda!"); } } } //定义一个函数式接口 interface ILike{ void lambda(); }
三、局部内部类
package ThreadTest; public class TestLambda { public static void main(String[] args) { //局部内部类 class Like implements ILike{ @Override public void lambda() { System.out.println("I like Lambda!"); } } ILike iLike = new Like(); iLike.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); }
四、匿名内部类
package ThreadTest; public class TestLambda { public static void main(String[] args) { //局部内部类,没有类的名称,必须借助接口或者父类 ILike like = new ILike() { @Override public void lambda() { System.out.println("I like Lambda!"); } }; like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); }
五、用lambda简化
package ThreadTest; public class TestLambda { public static void main(String[] args) { //用lambda简化,只有一句代码的时候才能去掉花括号 ILike like = ()->System.out.println("I like lambda!"); like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); }
六、有参数的lambda表达式
package ThreadTest; public class TestLambda { public static void main(String[] args) { //多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号,一个参数时可以不加 ILike like = (a,b)-> System.out.println("a="+a+" b="+b); like.lambda(1,1.0); } } //定义一个函数式接口 interface ILike{ void lambda(int a,double d); }
上一篇:
IDEA上Java项目控制台中文乱码