2010-04-01 24 views

Respuesta

6

element.getClass().getSimpleName() probablemente haga lo que está esperando.

+0

¿Sería K.class.getSimpleName() también el truco? Han pasado más de 10 años desde que javé, así que me perdí los genéricos. Podría estar equivocado. – spender

+0

Pero si la variable de elemento no se inicializa, ¿hay alguna otra forma de obtener el tipo sin obtener una excepción de puntero nulo? –

+3

K.class no funcionará (probablemente ni siquiera compile). Y sí, necesita anular la verificación. Y no, no hay otra forma debido a borrado de tipos (no hay información de tiempo de ejecución sobre K a menos que la almacene usted mismo). – Thilo

6

Debido a type erasure, no puede saber cuál fue el parámetro de tipo cuando se construyó la clase. Pero puede usar element.getClass() para obtener el tipo de tiempo de ejecución del elemento (que probablemente sea una subclase del parámetro de tipo, aunque no está garantizado; podría haber habido un molde no seleccionado).

Sin embargo, hay algunos trucos que permiten el acceso a los parámetros de tipo. Hay algunos trucos que Guice can do. Además, si crea una subclase de Foo, así: Foo<Integer> foo = new Foo<Integer>(){}; (observe el {} que lo convierte en una subclase anónima de Foo), entonces es posible obtener acceso al parámetro de tipo con ParameterizedType type = (ParameterizedType) foo.getClass().getGenericSuperclass() y luego llamar a los métodos de ParameterizedType. Esta es la característica de la API de reflexión de Java que también aprovecha Guice.

Cuestiones relacionadas