说我有这两种方法:
<T extends MyClass> void method1(Class<T> a, ArrayList<T> b) {
//whatever
}
<T extends MyClass> void method2(T c) {
method1(c.getClass(), new ArrayList<T>()); //Here I get compile error: wrong argument type for the second parameter
}
虽然这个其他代码段没有返回任何错误(只有未经检查的强制转换的警告):
<T extends MyClass> void method1(Class<T> a, ArrayList<T> b) {
//whatever
}
<T extends MyClass> void method2(T c) {
method1((Class<T>)c.getClass(), new ArrayList<T>());
}
有人可以解释为什么我在第一个例子中得到错误,以及最好的处理方法是什么?
答案 0 :(得分:1)
public final native Class<?> getClass();
- 这是来自Object
类的代码。因此,当您从Class<?>
到Class<T>
进行不安全的投射时,您会收到警告。您可以为JVM提供更大的灵活性:
<T extends MyClass> void method1(Class<T> a, List<T> b) {
//whatever
}
<T extends MyClass> void method2(T c) {
method1(c.getClass(), new ArrayList<>());
}
没有警告和编译错误。