gpt4 book ai didi

java - 本地类型推断与实例

转载 作者:行者123 更新时间:2023-12-03 22:14:30 24 4
gpt4 key购买 nike

我试过扫描JEP-286关于本地类型推断。我看到这仅适用于局部变量 - 理解。所以这确实有效:

public class TestClass {
public static void main(String [] args){
var list = new ArrayList<>();
list.add("1");
System.out.println(list.get(0)); // 1
}
}

另一方面,我确实看到这无法编译:
public class TestClass {
public var list = new ArrayList<>();
public static void main(String [] args){

}
}

很明显它没有,因为 JEP 是这么说的。现在我的问题:

对于声明为 var 的公共(public)/ protected 成员来说,这是非常有意义的。失败,至少在国际海事组织。但是为什么即使是 private 也编译不出来?我只能假设您仍然可以通过反射获得该变量(并且我无法获得这样的本地字段)......并且获得该变量将需要一个 Actor ,好吧,可能是一个非常困惑的 Actor 。

最佳答案

禁止对字段和方法返回进行类型推断的动机是 API 应该是稳定的;字段访问和方法调用在运行时由描述符链接,因此如果对实现的更改导致推断类型发生变化(模删除),导致推断类型发生细微变化的事情可能会导致现有编译客户端以可怕的方式中断。所以使用这对于实现,而不是 API,是一个明智的指导原则。

有理由问“那么,私有(private)字段和方法呢?”事实上,我们很可能会选择这样做。像所有设计决策一样,这是一个权衡;它将使推理能够在更多地方使用,以换取用户模型的更多复杂性。 (我不太关心规范或编译器的复杂性;那是我们的问题。)推理“局部变量是,字段和方法否”比添加各种周转考虑因素(例如“但是,字段”)更容易推理如果它们是私有(private)的,则方法是可以的”。在我们所做的地方画线也意味着将字段或方法从私有(private)更改为非私有(private)的兼容性后果不会与推理发生意外交互。

所以简短的回答是,这样做可以使语言更简单,而不会显着降低功能的用处。

关于java - 本地类型推断与实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070380/

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