从编译时和运行时角度看,我认为.getClass()
提供正确类型的返回值不应该成为问题。
但是我可能错了。
public class _GetClassGenerics2 {
static class MyClass {
}
public static void main(String[] args) {
MyClass myInstance = new MyClass();
// here it works
Class<? extends MyClass> type = myInstance.getClass();
myMethod(myInstance);
}
public static <T extends MyClass> void myMethod(T instance) {
Class<? extends T> type = instance.getClass();
// java.lang.RuntimeException: Uncompilable source code - incompatible types
// required: java.lang.Class<? extends T>
// found: java.lang.Class<capture#1 of ? extends _GetClassGenerics2.MyClass>
}
}
编辑:它也不适用于Class<T>
和Class<? super T>
。
Class<? super T> type
怎么样? - sjngm@sjngm
:1)请看修改,2)给出的其他问题不是那么相关,我(通常)理解super
和extends
之间的区别。 - java.is.for.desktop