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

标签 java eclipse generics

我的 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/

相关文章:

java - 将 java 类型 string[] 映射到 oracle 类型

java - 如何找到公式的所有可能解,例如 100*7-8*3+7? (10 只猫中有 8 只做倒计时求解器)

c++ - 在 Mac OS X 上使用 Eclipse CDT 调试远程 Linux 应用程序

android - 导出已签名的应用程序包时出错

java - 在java中 double 被分配给一个整数列表

c++模板方法语法问题

generics - 计算 Scala 泛型类 'equals' 方法中的类型参数... list 是唯一的方法吗?

java - 对从文件中读取的数据进行错误计数

java - JBoss Drools 检查一次条件

eclipse - 您没有查看 eclipse 内容所需的权限