Functional Interface,顾名思义就是函数式接口。它有以下特征:
@FunctionalInterface
注解的接口声明是函数式接口,例如 java.lang.Runnable
, java.util.concurrent.Callable
, java.util.function.*
。
为了让现有的功能与Lmabdas表达式有很好的兼容,不受非抽象函数的影响,和将接口(匿名内部类)隐式转为Lambda表达式。例如 java.lang.Runnable
接口。
@FunctionalInterface
public interface Service {
/***
* 抽象方法
*/
public abstract void create();
/***
* 静态方法:必须有方法体,实现着可以覆盖
* @param pid
*/
public static void delete(int pid) {};
/***
* 默认方法:必须有方法体,实现着可以覆盖
*/
public default void update() {};
/**
* 默认方法:必须有方法体,实现着可以覆盖
* @param pid
*/
public default void get(int pid) {};
}
public class Server implements Service {
private Service service;
public Server(Service service) {
this.service = service;
};
public void start() {
this.service.create();
};
public void restart() {
if (service != null) {
this.service.create();
} else {
this.service.create();
}
};
public void update() {
this.service.update();
};
public void stop(int pid) {
Service.delete(pid);
}
@Override
public void create() {
if (service != null) {
service.create();
}
};
}
public class Test {
public static void main(String[] args) {
// 使用函数接口的匿名内部类
new Server(new Service() {
@Override
public void create() {
System.out.println("start");
}
}).start();
// 实际隐藏式转化为以下Lambda表达式
new Server(() -> {
System.out.println("restart");
}).restart();
}
}
【译】Java 8的新特性—终极版
Java 8 新特性
Java 8新特性终极指南