我的日食中有这个程序。如果我用JDK 1.5编译它(构建路径 - >配置构建路径 - > java编译器 - > JDK合规性 - >编译器合规级别= 1.5),我得到方法m1的类型擦除错误
我可以选择将编译器合规性级别选为5(在构建路径中 - >配置构建路径 - > java compilern - > 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:)
答案 0 :(得分:3)
Java的泛型是使用称为“类型擦除”的方法实现的。基本上,编译器会插入一些隐藏的强制转换,并从泛型类的名称中删除该类型。因此,一旦编译代码,List<Integer>
就会变为List
。与List<Number>
和List<String>
相同。这意味着你最终会得到两个public static void m1(List, List)
方法。
这不适用于任何 Java编译器;为什么它被允许对我来说有点神秘。
答案 1 :(得分:0)
IMO你应该在任何情况下得到错误。您能否根据合规级别“5”
检查JDK的配置