接口
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对应的接口
-