先看入门例子,函数式编程的魅力
@FunctionalInterface
public interface Hello {
String msg(String info);
}
怎么去使用
Hello hello = param -> param + "world!";
System.out.println("test functional:" + hello.msg("hello,"));
输出结果
test functional:hello,world!
再看一下产生的一样效果的代码
Hello hello2 = new Hello() {
@Override
public String msg(String info) {
return info + ",world";
}
};
System.out.println("test functional:" + hello2.msg("hello,"));
什么是函数式接口
所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。
但是
- 函数式接口里允许定义默认方法
- 函数式接口里允许定义静态方法
-
函数式接口里允许定义java.lang.Object里的public方法
函数式接口里允许定义默认方法
静态方法也可以
注解FunctionalInterface
Java 8为函数式接口引入了一个新注解@FunctionalInterface,主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。
接口中包含了两个抽象方法,违反了函数式接口的定义
JDK中的函数式接口举例
java.lang.Runnable,
java.awt.event.ActionListener,
java.util.Comparator,
java.util.concurrent.Callable
java.util.function包下的接口,如Consumer、Predicate、Supplier等
网友评论