接口
package Demo4; public interface Addable { int add(int x,int y); }
测试类
package Demo4; public class AddableDemo { public static void main(String[] args) { // 匿名内部类,创建接口对象,重载Addable接口add方法 // 匿名内部类创建的类型可以是接口,也可以是抽象类,还可以是具体类 useAddable(new Addable() { @Override public int add(int x, int y) { return x+y; } }); // lambda表达式方法也是重载了方法,相比较于匿名内部类更简单清晰 // 省略了方法名,省略了参数类型,接口名和函数名都一同省掉 // 如果代码只有一行可再省略省略大括号和分号, // 如果有return,return也要省略掉 useAddable((x,y)->x+y); // 为什可以省略因为javac的类型推断机制 // 编译器能够根据上下文信息推断出参数的类型 } private static void useAddable(Addable a){ int sum = a.add(10,20); System.out.println(sum); } }
注意:
-
-
必须有上下文环境,才能推导出Lambda对应的接口
-
根据局部变量的赋值得知Lambda对应的接口
Runnable r = () -> System.out.println("Lambda表达式");
-
根据调用方法的参数得知Lambda对应的接口
-