Supongo que, desde el momento de la compilación, así como desde el aspecto del tiempo de ejecución, no sería un problema para .getClass()
proporcionar un valor de retorno correctamente tipado.genéricos de Java: ¿por qué someObject.getClass() no devuelve Class <? extends T>?
Pero debo estar equivocado.
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>
}
}
EDIT: no funciona con Class<T>
y Class<? super T>
tampoco.
¿Qué tal 'Clase super T> type'? – sjngm
Encontré una pregunta que podría explicarlo: http://stackoverflow.com/questions/252055/java-generics-wildcards – sjngm
'@ sjngm': 1) Ver edición, 2) La otra pregunta dada no es relevante, I (usualmente) entiende la diferencia entre 'super' y' extends'. –