Java: getClass () de tipo acotado
Noté algo mientras estaba divagando con genéricos. En el siguiente ejemplo,doStuff1
compila perodoStuff2
no hace
public <T extends Foo> void doStuff1(T value) {
Class<? extends Foo> theClass = value.getClass();
}
public <T extends Foo> void doStuff2(T value) {
Class<? extends T> theClass = value.getClass();
}
Por lo tanto, busqué la documentación paraObject.getClass()
y encontré esto:
El tipo de resultado real es Clase <? se extiende | X |> donde | X | es el borrado del tipo estático de la expresión en la que se llama a getClass.
Esto me dio un poco de curiosidad. Por que esgetClass()
diseñado de esta manera? Puedo entender la conversión de tipos a sus clases en bruto, si corresponde, pero no veo ninguna razón obvia por la que necesariamente tendrían que hacerlo también.T
. ¿Hay alguna razón específica por la que también se deshaga de él o es simplemente un enfoque general de "deshacámonos de todo porque es más fácil; quién lo necesitaría de todos modos"?