gpt4 book ai didi

java - 有一天,JVM "void return type only"会成为一种自调用链新功能吗?

转载 作者:行者123 更新时间:2023-11-30 06:43:17 26 4
gpt4 key购买 nike

有一天,JVM“仅返回 void 返回类型”会成为一种自调用链新功能吗?

1)这将允许返回任何内容:但可能不太好,正如评论者所说

如果没有,为什么?为什么下面有一个充分的理由不允许这样做?

class A{
// public Object a(){return null;}
public void a(){}
}
class B extends A{
@Override
public String a(){return "";}; //error
}

2)这是关于 self 调用链,限制使用,会是更好/更安全/更清晰的选项

为什么我想要这个?让 setter 链式链接,如:new B().set1(1).set2(2).set3(3);使用getThis() trick

void return 太没用了,它不会破坏任何东西,因为它已经被所有东西忽略了!

由于我们无法访问大多数库的 setter ,并且不想将它们全部 fork ,所以真正的交易是让 void (或 Void?) 成为 Object 我猜。 或者更好的是,成为一个名为“? extends Self”的新限制类型,让 getThis() 技巧成为 JVM 核心的一部分。。因此,这将是一个受限制的用例,仅允许自链调用。

为什么高级语言(然后是汇编程序)不能允许这种协变“违法”能力/选项?如果我们调用一个返回某些内容的方法并忽略/不捕获它,那么它将等同于 void 返回!因此,原本的后退功能可以为曾经只有一片选择的沙漠带来新的曙光。

所以,这是真正的交易,返回 void 的 setter 会让我们别无选择:

class A<SELF extends A>{
// public void set(){} //this one leaves us no options
public SELF set(){return getThis();}
public SELF getThis(){return (SELF)this;}
}
class B extends A<B>{
@Override public B set(){return getThis();}
@Override public B getThis(){return this;}
}

基本上,我不是在寻找意见,而是在寻找一个很好的理由/解释。

所以,我知道我正在进一步论证超出这个问题的要求:Why is void not covariant in Java?

最佳答案

Java 确实支持协变返回类型。例如:

class A {
Object run() { ... }
}

class B {
String run() {...}
}

因此,您的链式 setter 示例可以使用重写(或泛型)。但生成的代码可能感觉不像惯用的 Java。

关于java - 有一天,JVM "void return type only"会成为一种自调用链新功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037390/

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