Fra*_*ris 9 java lambda functional-interface
通常,在大型项目的上下文中,将现有的,无处不在的接口用于功能接口是否安全?
例如,给定一个现有的接口和类:
public interface Interface {
public double calculateSomething(double x);
public void doSomething();
}
Run Code Online (Sandbox Code Playgroud)
由...实施
class InterfaceImplementer implements Interface {
public double calculateSomething(double x) {
return 2 * x;
}
public void doSomething() {
// insert specific behavior here
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过定义除一个方法之外的所有方法来安全地更改界面:
public interface Interface {
public double calculateSomething(double x);
default void doSomething() {
// insert some default behavior here
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以将对象定义为
Interface object = new InterfaceImplementer() {
@Override
public double calculateSomething(double x) {
return 2 * x;
}
};
Run Code Online (Sandbox Code Playgroud)
至
Interface object = (x) -> 2 * x;
Run Code Online (Sandbox Code Playgroud)
同时仍然能够以旧的,乏味的方式定义对象.
据我所知,这不会有任何现有代码的风险,我已经对大型项目进行了这样的更改,并且没有运行时或编译错误.但我想要确认这是否符合常识和最佳实践.
任何只有一个非默认方法的接口(只需要在一个类中实现一个方法)根据定义是一个功能接口.这是一个很好的规则!
但是,@FunctionalInterface注释具有强制执行 "功能接口的接口中只有一种方法" 的优点.因此,如果将其添加到原始的双方法接口,则会出现编译器错误.因此,通过明确添加,@FunctionalInterface您声明您的意图,并使您的代码更清晰,以便未来的维护者.
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |