【发布时间】:2016-03-17 10:44:48
【问题描述】:
我试图理解为什么不允许在一个类中同时编写这两种方法
public bool plus(List<String>) {return true;}
public bool plus(List<Integer>) {return true;}
我试图弄清楚它与类型擦除的关系,但是当我反编译以下代码时
public class Test<T> {
boolean plus2(List<T> ss) {return false;}
boolean plus(List<String> ss) {return false;}
boolean plus(Set<Integer> ss) {return false;}
}
当我用Java反编译器(jd)反编译它时,我得到了同样的结果
即使我打印字节码,我也可以清楚地看到类型。
(查看 SO answer 声明“但请确保类型在字节码中被删除”)
Compiled from "Test.java"
public class com.example.Test<T> {
public com.example.Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
boolean plus2(java.util.List<T>);
Code:
0: iconst_0
1: ireturn
boolean plus(java.util.List<java.lang.String>);
Code:
0: iconst_0
1: ireturn
boolean plus(java.util.Set<java.lang.Integer>);
Code:
0: iconst_0
1: ireturn
}
【问题讨论】:
标签: java java-8 type-erasure