我认为这个问题已经存在,但我无法找到它.
我不明白,为什么有必要使用功能界面来处理lambdas.请考虑以下示例:
public class Test {
public static void main(String...args) {
TestInterface i = () -> System.out.println("Hans");
// i = (String a) -> System.out.println(a);
i.hans();
// i.hans("Hello");
}
}
public interface TestInterface {
public void hans();
// public void hans(String a);
}
Run Code Online (Sandbox Code Playgroud)
这没有问题,但如果您取消注释注释行,它不会.为什么?在我的理解中,编译器应该能够区分这两种方法,因为它们具有不同的输入参数.为什么我需要一个功能界面并炸毁我的代码?
编辑:链接重复项没有回答我的问题,因为我问的是不同的方法参数.但是我在这里得到了一些非常有用的答案,感谢所有帮助过的人!:)
编辑2:对不起,我显然不是母语人士,但为了准确自己:
public interface TestInterface {
public void hans(); //has no input parameters</br>
public void hans(String a); //has 1 input parameter, type String</br>
public void hans(String a, int b); //has 2 input parameters, 1. type = String, …Run Code Online (Sandbox Code Playgroud) 下面的接口是 Java 8 中有效的功能接口吗?
@FunctionalInterface
interface Normal{
public abstract String move();
public abstract String toString() ;
}
Run Code Online (Sandbox Code Playgroud)
为什么它不给我一个编译时错误?
@FunctionalInterface
interface MyLambda {
void apply1();
int apply2(int x, int y);
}
Run Code Online (Sandbox Code Playgroud)
现在使用Lambda表达式,为什么Java不能将下面的两个代码分开,因为它清楚地区分了两个代码:
MyLambda ml1 = () -> System.out.println("Hello");
MyLambda ml2 = (x, y) -> x+y;
Run Code Online (Sandbox Code Playgroud)