方法具有相同类型的擦除

时间:2010-07-30 08:55:44

标签: java eclipse generics

我的日食中有这个程序。如果我用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:)

2 个答案:

答案 0 :(得分:3)

Java的泛型是使用称为“类型擦除”的方法实现的。基本上,编译器会插入一些隐藏的强制转换,并从泛型类的名称中删除该类型。因此,一旦编译代码,List<Integer>就会变为List。与List<Number>List<String>相同。这意味着你最终会得到两个public static void m1(List, List)方法。

这不适用于任何 Java编译器;为什么它被允许对我来说有点神秘。

答案 1 :(得分:0)

IMO你应该在任何情况下得到错误。您能否根据合规级别“5”

检查JDK的配置