在 Java 中使用泛型时,了解使用原始类型的含义非常重要。原始类型只是对没有指定任何类型参数的泛型类型的引用。
问题
考虑以下代码:
ArrayList<String> a = new ArrayList<>(); String[] s = a.toArray(new String[0]);
此代码编译成功,因为 toArray 是一个接受
ArrayList a = new ArrayList(); String[] s = a.toArray(new String[0]);
编译器将生成错误,指示需要 String[],但找到了 Object[]。这是因为编译器将泛型方法解释为返回 Object[],尽管接收 String[] 作为其参数。
理解原始类型
要理解这种行为,需要认识到当您使用原始类型时,您将失去指定类型参数的能力,这一点至关重要。 Java 语言规范 (JLS) 规定,对于原始类型:
“原始类型 C 的构造函数、实例方法或非静态字段 M 的类型,不是从其超类或超接口继承的是原始类型,对应于与 C 相对应的泛型声明中其类型的擦除。”
换句话说,原始类型中的所有泛型方法和字段都被视为使用原始类型本身。
泛型方法的含义
这意味着当您使用原始类型作为泛型方法调用的目标时,编译器无法推断出该类型方法的参数。因此,该方法将被假定为仅在参数的类型参数上是通用的。在我们的例子中,由于我们传递了 String[] 参数,因此 toArray 方法被视为
进一步阅读参考文献
以上是为什么在 Java 中使用原始类型和泛型方法会导致类型错误?的详细内容。更多信息请关注PHP中文网其他相关文章!