
JDK1.8 @FunctionalInterface:
用于指示接口类型声明是一个函数接口,语法定义上,函数接口只有一个抽象方法。{java.lang.reflect.Method#isDefault()}新增了对default 方法的判断,允许接口有存在default修饰的非抽象方法(一个或多个)。如果 接口声明覆盖 了{ java.lang.Object}的公共方法,不计入接口的抽象方法数。 可以使用以下命令创建功能接口的实例 :1)lambda表达式 2)方法引用 3)构造函数引用。使用该注解声明接口时,当不满足函数接口规范时,编译器会报错。另外,static修饰的方法也不计入抽象方法数(因为不是抽象的)。
实例:
package util;
public class LambdaDemo {
public static void main(String[] args) {
OnePatamC c = new OnePatamC();
c.printO((i) -> {
System.out.println(i);
});
}
}
@FunctionalInterface
interface OnePatam{
// 函数式方法 抽象的,符合lambda使用规范
void show(int i);
// 重写java.lang.Object方法不计入抽象方法数
String toString();
// jdk新增静态方法 ,允许"类型.方法"形式调用
static String test(String s1){
return s1;
}
static String test1(String s1){
return s1;
}
// jdk新增default方法修饰符 ,允许"类型.方法"形式调用
// 配套提供Method.isDefault() 判断是否为default方法
default String testa(String s1){
return s1;
}
default String testb(String s1){
return s1;
}
}
class OnePatamC{
public void printO(OnePatam o){
System.out.println(o);
o.show(1);
}
}