Tag: type in​​ference

推理变量具有不兼容的边界。 Java 8编译器回归?

以下程序在Java 7和Eclipse Mars RC2 for Java 8中编译: import java.util.List; public class Test { static final void a(Class<? extends List> type) { b(newList(type)); } static final List b(List list) { return list; } static final <L extends List> L newList(Class type) { try { return type.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } } […]

为什么在Java 7中使用菱形运算符进行类型推理?

List list = new ArrayList(); 将导致编译器警告。 但是,以下示例在没有任何警告的情况下编译: List list = new ArrayList(); 我很好奇为什么需要引入钻石操作员。 如果没有类型参数,为什么不在构造函数上进行类型推断(因为它已经针对java中的静态方法已经完成并且被像google guava这样的集合库利用) 编辑 :使用millimoose答案作为起点我查看了实际上是什么类型的擦除,它不只是删除所有类型信息。 编译器实际上做了一些(从官方文档复制): 如果类型参数是无界的,则将generics类型中的所有类型参数替换为其边界或对象。 因此,生成的字节码仅包含普通的类,接口和方法。 如有必要,插入类型铸件以保持类型安全。 生成桥接方法以保留扩展generics类型中的多态性。