假设我有接口A,它只有一个声明如下的方法:
interface A{
void print();
}
Run Code Online (Sandbox Code Playgroud)
现在使用旧的java风格,我们将以匿名的方式使用它,如下所示:
new A() {
@Override
public void print() {
System.out.println("in a print method");
}
};
Run Code Online (Sandbox Code Playgroud)
并使用lambda表达式,我们将使用它如下:
() -> "A1";
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如果接口A有两个声明如下的方法:
interface A{
void print();
void display();
}
Run Code Online (Sandbox Code Playgroud)
它以前的匿名函数利用方式如下:
new A() {
@Override
public void print() {
System.out.println("in print");
}
@Override
public void display() {
System.out.println("in display");
}
};
Run Code Online (Sandbox Code Playgroud)
现在如何将显示方法转换为lambda?或者我们不被允许这样做; 如果不是为什么不呢?为什么我们不能代表它
print() - >"打印"
和
display() - >"显示"
你不能.lambda表达式只能用于"功能"接口 - 只有一个非默认方法的接口.
对于"为什么"你必须要求语言设计者,但我的看法是lambda表达式是单个代码块的简写,而作为一个单元处理的一组相关块将更好地表示为一个正确的类.对于喜欢在问题的例子的情况下,真正的答案将修改API,而不是使用一个单一的,这样A它使用两个单独的功能接口为两个功能两种方法的接口APrinter和ADisplayer,这可能再由独立的lambda表达式来实现.
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |