1. 函数式接口声明
接口中只能有一个抽象方法@FunctionalInterface 注解不是必须的,但加上它后,如果出现两个或两个以上的抽象方法时编译器会检测错误
@FunctionalInterface
public interface FunInterface {
public abstract String
funTest();
}
2. 函数式编程 示例
public class FunctionalTest {
public static void main(String
[] a
) {
test(FunctionalTest
::aaa
);
test(() -> {
System
.out
.println("aaa");
return "aaa";
});
}
private static void test(FunInterface funInterface
) {
System
.out
.println(funInterface
.funTest());
}
private static String
aaa() {
System
.out
.println("aaa");
return "aaa";
}
}
test接收接口类型 对象作为参数。jdk1.8后, 可以简写为传入一个方法。此方法将是函数式接口中唯一抽象方法的具体实现。
3. 示例
public class FunctionalTest {
public static void main(String
[] a
) {
test(FunctionalTest
::aaa
);
test(() -> "bbb");
FunctionalTest
.testTwo(FunctionalTest
::aaaTwo
,"参数");
FunctionalTest
.testTwo(data
-> data
,"参数2");
}
private static void test(FunInterface funInterface
) {
System
.out
.println(funInterface
.funTest());
}
private static void testTwo(FunInterfaceTwo funInterfaceTwo
,String str
) {
System
.out
.println(funInterfaceTwo
.funTest(str
));
}
private static String
aaa() {
return "aaa";
}
private static String
aaaTwo(String str
) {
return str
;
}
}
@FunctionalInterface
interface FunInterface {
public abstract String
funTest();
}
@FunctionalInterface
interface FunInterfaceTwo {
public abstract String
funTest(String str
);
}
public class FunctionalTest {
private String str
;
public FunctionalTest(String src
) {
this.str
= src
;
}
public static void main(String
[] a
) {
FunctionalTest functionalTest
= new FunctionalTest("你好");
FunInterfaceTwo funInterfaceTwo
= new FunInterfaceTwoImpl();
functionalTest
.testTwo(functionalTest
::aaaTwo
);
functionalTest
.testTwo(data
-> {
System
.out
.println(data
);
});
functionalTest
.testTwo(funInterfaceTwo
);
}
private void testTwo(FunInterfaceTwo funInterfaceTwo
) {
funInterfaceTwo
.funTest(this.str
);
}
private void aaaTwo(String str
) {
System
.out
.println(str
);
}
}
@FunctionalInterface
interface FunInterfaceTwo {
void funTest(String str
);
}
class FunInterfaceTwoImpl implements FunInterfaceTwo {
@Override
public void funTest(String str
) {
System
.out
.println(str
);
}
}