我认为这个问题已经存在,但是我找不到。
我不明白,为什么必须要有一个功能html" target="_blank">接口才能使用lambda。考虑以下示例:
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);
}
这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码?
编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要归功于所有人的帮助!:)
EDIT2:对不起,我显然不是母语人士,但请精确地说:
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, 2. type = int</br>
public void hans(int a, int b); //has also 2 input parameters, but not the same and a different order than `hans(String a, int a);`, so you could distinguish both
}
public class Test {
public static void main(String...args) {
TestInterface i = () -> System.out.println("Hans");
i = (String a) -> System.out.println(a);
i = (String a, int b) -> System.out.println(a + b);
i = (int a, int b) -> System.out.println(a);
i.hans(2, 3); //Which method would be called? Of course the one that would take 2 integer arguments. :)
}
}
我要问的只是论点。方法名称无关紧要,但是每个方法采用不同参数的唯一顺序,因此,Oracle可以实现此功能,而不是仅使每个“
Lambda接口”使用一个方法即可。
当你写:
TestInterface i = () -> System.out.println("Hans");
您可以实现的void hans()
方法TestInterface
。
如果您可以将lambda表达式分配给具有多个抽象方法的接口(即非功能性接口),则lambda表达式只能实现一种方法,而其他方法则无法实现。
您无法通过将两个具有不同签名的lambda表达式分配给同一变量来解决它(就像您不能将两个对象的引用分配给单个变量一样,并且希望该变量一次引用两个对象)。
我只想问关于争论的事。方法名并不重要,但每个方法都采用不同参数的唯一顺序,因此Oracle可以实现这个特性,而不是让每个“lambda-interface”都有一个方法。
问题内容: 我正在使用以下版本: 离子v1.0.0-beta.14 AngularJS v1.3.6 路由配置: 控制器配置: 查看配置: 如您在视图中看到的,我需要使用以下字段才能使其工作: 我真的不明白为什么这样做是必要的,因为完整的视图使用的是同一控制器。有人有主意吗? 问题答案: 问题是继承。在控制器的作用域和这些字段之间,有几个新的作用域(离子含量,离子滚动以及其他可能)。 因此,例如。
我试图让VSCode启动并使用TypeScript运行,但收效甚微。 我正在看以下内容: https://code.visualstudio.com/docs/languages/typescript 看起来,一旦安装了编译器VSCode,就应该可以正常工作,但考虑到以下情况: tsconfig.json 包裹json tasks.json 项目 你好世界ts 从终端运行构建任务或tsc会正确指示
我正在阅读关于功能更新的React Hook留档,请参阅以下引用: “”和“-”按钮使用函数形式,因为更新的值基于以前的值 但是我看不出需要功能更新的目的是什么,它们和直接使用旧状态计算新状态有什么区别。 为什么React-useState钩子的更新程序函数需要函数更新表单?在哪些示例中,我们可以清楚地看到差异(因此使用直接更新会导致错误)? 例如,如果我从文档中更改此示例 要直接更新: 我看不到
问题内容: 如果包含变音符号(ä,ö,ü)在我的Windows操作系统上不起作用。通过反复试验,我发现需要做一些工作。 但是,当我将其实时推送到服务器上(猜测它是某种Linux)时,它又返回了一个错误,因此我删除了,然后突然工作正常。 作为一种解决方法(因此,我不需要在每次更改代码时都手动更改此代码),我已经尝试过 因为这已经反过来解决了相同的问题()也有同样的问题,但是事实证明它在每个(服务器)
问题内容: 我们需要大量的序列化工作,并且必须在使用的每个对象上指定标签,这是一种负担。特别是当它是第三方类时,我们不能真正更改。 问题是:由于是一个空接口,并且Java一旦添加便提供了可靠的序列化 为什么它们不使所有内容都可序列化,仅此而已? 问题答案: 序列化充满陷阱。这种形式的自动序列化支持使类内部成为公共API的一部分(这就是javadoc为你提供类的持久化形式的原因)。 为了实现长期持久