gpt4 book ai didi

java - 为什么 diamond 不能推断匿名内部类的类型?

转载 作者:IT老高 更新时间:2023-10-28 20:53:48 25 4
gpt4 key购买 nike

在 Java 7 及更高版本中,diamond 可用于正常推断类型,如下所示:

List<String> list = new ArrayList<>();

但是,它不能用于这样的匿名内部类:

List<String> st = new List<>() { //Doesn't compile

//Implementation here

}

这是为什么?从逻辑上讲,在这种情况下,我绝对可以将类型推断为 String。这个决定是否存在逻辑上的原因,即类型实际上不能在匿名内部类上推断出来,还是因为其他原因而被省略?

最佳答案

JSR-334 :

Using diamond with anonymous inner classes is not supported since doing so in general would require extensions to the class file signature attribute to represent non-denotable types, a de facto JVM change.

我的猜测是,众所周知,匿名类会导致生成自己的类文件。

我想这些文件中不存在泛型类型,而是由有效(静态)类型代替(因此在声明对象时由显式类型如 <String> 声明)。

确实,对应于内部类的文件永远不会在它的多个不同实例之间共享,那么为什么还要在其中使用泛型呢?! :)。

编译器强制对这些类文件进行扩展(通过为泛型添加特殊属性)将更难以实现(而且肯定是无用的)。

关于java - 为什么 diamond 不能推断匿名内部类的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821586/

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