编程语言
首页 > 编程语言> > java-方法具有相同的类型擦除

java-方法具有相同的类型擦除

作者:互联网

我的日食中有这个程序.并且如果我使用JDK 1.5进行编译(构建路径->配置构建路径-> java编译器n-> JDK遵从性->编译器遵从性级别= 1.5),我将得到方法m1的类型擦除错误

我有一个选择可以在driop down中选择编译器遵从级别作为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< Number>相同和List< String>.这意味着您最终将拥有两个公共静态void m1(List,List)方法.

这在任何Java编译器中都不应该起作用.为什么允许这样做对我来说还是个谜.

标签:eclipse,generics,java
来源: https://codeday.me/bug/20191209/2097526.html