java-lambda(笔记)
作用
- 避免匿名内部类定义过多
- 使代码简洁
- 去掉了没有意义的代码,只留下核心
函数式接口
只包含一个抽象方法的函数式接口
对于函数式接口,可用lambda表达式
推导lambda表达式
-
最早期版本(用了多态,父类引用指向子类对象,有继承的方法用子类的)
package com.zihan.thread; /* 推导lambda表达式 */ public class lambda { public static void main(String[] args) { ILike like = new like(); like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); } //实现类 class like implements ILike{ public void lambda(){ System.out.println("111222"); } } -
优化之后用静态内部类
注意static class这一块,下面属于类型转换,高转低
package com.zihan.thread; /* 推导lambda表达式 */ public class lambda { //3.静态内部类 static class like2 implements ILike{ public void lambda(){ System.out.println("111222"); } } public static void main(String[] args) { ILike like = new like(); like.lambda(); like = new like2(); like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); } //实现类 class like implements ILike{ public void lambda(){ System.out.println("111222"); } } -
main 方法里写局部内部类
package com.zihan.thread; /* 推导lambda表达式 */ public class lambda { //3.静态内部类 static class like2 implements ILike{ public void lambda(){ System.out.println("111222"); } } public static void main(String[] args) { ILike like = new like(); like.lambda(); like = new like2(); like.lambda(); //4.局部内部类 class like3 implements ILike{ public void lambda(){ System.out.println("111222"); } } like = new like3(); like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); } //实现类 class like implements ILike{ public void lambda(){ System.out.println("111222"); } } -
用了匿名内部类
package com.zihan.thread; /* 推导lambda表达式 */ public class lambda { //3.静态内部类 static class like2 implements ILike{ public void lambda(){ System.out.println("111222"); } } public static void main(String[] args) { ILike like = new like(); like.lambda(); like = new like2(); like.lambda(); //4.局部内部类 class like3 implements ILike{ public void lambda(){ System.out.println("111222"); } } like = new like3(); like.lambda(); //5.匿名内部类 like = new ILike() { @Override public void lambda() { System.out.println("111222"); } }; like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); } //实现类 class like implements ILike{ public void lambda(){ System.out.println("111222"); } } -
用lambda解决
package com.zihan.thread; /* 推导lambda表达式 */ public class lambda { //3.静态内部类 static class like2 implements ILike{ public void lambda(){ System.out.println("111222"); } } public static void main(String[] args) { ILike like = new like(); like.lambda(); like = new like2(); like.lambda(); //4.局部内部类 class like3 implements ILike{ public void lambda(){ System.out.println("111222"); } } like = new like3(); like.lambda(); //5.匿名内部类 like = new ILike() { @Override public void lambda() { System.out.println("111222"); } }; like.lambda(); //6. 用lambda简化 like = ()->{ System.out.println("111222"); }; like.lambda(); } } //定义一个函数式接口 interface ILike{ void lambda(); } //实现类 class like implements ILike{ public void lambda(){ System.out.println("111222"); } }静态内部类要放在psvm外面,其余内部类放在psvm中,因为static在主方法之前
-
带参数的例子
package com.zihan.thread; public class Lambda2 { static class Love implements Ilove { @Override public void love(int a) { System.out.println("i love " + a); } } public static void main(String[] args) { Ilove love = (int a) -> { System.out.println("i love " + a); }; love.love(3); //简化一,去参数类型 love = ( a) -> { System.out.println("i love " + a); }; love.love(4); //简化二,去参数括号 love = a -> { System.out.println("i love " + a); }; love.love(5); //简化三,取代码体花括号 love = a -> System.out.println("i love " + a);; love.love(521); } }
浙公网安备 33010602011771号