参见英文答案 >
Java generics type erasure: when and what happens? 7个
我有一个通用的Java接口Id< T>使用单个方法T getId()和一个实现Id< Long>的MyClass类.当我使用java反射检查在MyClass上声明的方法时,我看到两个方法:一个返回类型为Long,另一个返回类型为Object.第二种方法来自何处,如何将其删除?
这是来源:
package mypackage;
import java.lang.reflect.Method;
public class MainClass {
public static void main(String[] args) {
for (Method method : MyClass.class.getDeclaredMethods()) {
System.out.println(method);
}
// prints out two lines
// public java.lang.Long mypackage.MyClass.getId()
// public java.lang.Object mypackage.MyClass.getId()
}
}
interface Id {
T getId();
}
class MyClass implements Id {
@Override
public Long getId() {
return new Long(0);
};
}