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);
}
}