gpt4 book ai didi

Java 8方法签名同一方法的不同版本

转载 作者:行者123 更新时间:2023-12-02 14:11:35 24 4
gpt4 key购买 nike

版本 1

interface HelloWorld{
String hello(String s);
}
HelloWorld h = String::new;
h.hello("Something");

版本 2

interface HelloWorld{
void hello(String s);
}
HelloWorld h = String::new;
h.hello("Something");

版本 3

interface HelloWorld{
String hello();
}
HelloWorld h = String::new;
h.hello();

版本 4

 interface HelloWorld{
void hello();
}
HelloWorld h = String::new;
h.hello();

我创建了相同代码的四个版本,但没有更改 HelloWorld h = String::new;我能够理解的第一种情况,它创建新的字符串对象,并在参数中传递值并返回该对象。

能否详细说明为什么编译器在其他情况下没有给出任何错误并进行一些解释?

最佳答案

在版本 1 和版本 2 中,您的 String::new方法引用引用public String(String original) String 的构造函数类。

在版本 3 和版本 4 中,您的 String::new方法引用引用public String() String 的构造函数类。

函数式接口(interface)的方法是否返回 String 并不重要。或有 void返回类型。无论哪种方式,相关的String::new方法引用适合您的接口(interface)方法的签名。

也许编写 Java 7 的等价物会让这更容易理解:

版本 1:

HelloWorld h = new HelloWorld () {
String getSomething(String s) {
return new String(s);
}
}

版本 2:

HelloWorld h = new HelloWorld () {
void getSomething(String s) {
new String(s);
}
}

版本 3:

HelloWorld h = new HelloWorld () {
String getSomething() {
return new String();
}
}

版本 4:

HelloWorld h = new HelloWorld () {
void getSomething() {
new String();
}
}

关于Java 8方法签名同一方法的不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com