相关疑难解决方法(0)

为什么我需要一个功能界面来处理lambdas?

我认为这个问题已经存在,但我无法找到它.

我不明白,为什么有必要使用功能界面来处理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 lambda java-8 functional-interface

33
推荐指数
4
解决办法
2万
查看次数

为什么我的 @FunctionalInterface 有两种方法没有编译错误?

下面的接口是 Java 8 中有效的功能接口吗?

@FunctionalInterface
interface Normal{
    public abstract String move();
    public abstract String toString() ;
}
Run Code Online (Sandbox Code Playgroud)

为什么它不给我一个编译时错误?

java functional-programming java-8

8
推荐指数
1
解决办法
301
查看次数

为什么在Java8的Functional Interface中不使用多个抽象方法?

@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)

java lambda

6
推荐指数
1
解决办法
4157
查看次数