我的 eclipse 中有这个程序。如果我用 JDK 1.5(构建路径 -> 配置构建路径 ->java 编译器 ->JDK 合规性 -> 编译器合规性级别 = 1.5)编译它,我会得到方法 m1 的类型删除错误
我可以选择将编译器合规性级别选择为 5(构建路径 -> 配置构建路径 ->java 编译器 ->JDK 合规性 -> 编译器合规性级别 = 5),我没有收到此错误.
我没有看到我选择的这个设置有什么不同。但为什么我会收到错误消息? 1.5和5有什么区别
import java.util.*;
class TestWrapper
{
public static void main(String[] args) {
List<Number> ls1 = new ArrayList<Number>();
List<String> ls2 = new ArrayList<String>();
m1(ls1,ls2);
}
public static void m1(List<Integer> l1,List<Integer> l2){}
public static void m1(List<Number> l1,List<String> l2) {}
谢谢大家的回答 Java:)
最佳答案
Java 的泛型是使用一种称为“类型删除”的方法实现的。基本上,编译器会插入一些隐藏的强制转换并从泛型类的名称中删除类型。所以一旦代码被编译,List<Integer>
变成 List
.与 List<Number>
相同和 List<String>
.这意味着你最终会得到两个 public static void m1(List, List)
方法。
这不应该在任何 Java 编译器中工作;为什么允许它对我来说有点神秘。
关于java - 方法具有相同类型的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369983/