2010-04-01 6 views

Répondre

6

element.getClass().getSimpleName() va probablement faire ce que vous attendez.

+0

Est-ce que K.class.getSimpleName() ferait aussi l'affaire? Cela fait plus de 10 ans que java'd j'ai manqué des génériques. J'ai peut être tort. – spender

+0

Mais si la variable d'élément n'est pas initialisée, existe-t-il un autre moyen d'obtenir le type sans obtenir une exception de pointeur nul? –

+3

K.class ne fonctionnera pas (probablement même pas compiler). Et oui, vous devez vérifier nullement. Et non, il n'y a pas d'autre moyen à cause de l'effacement du type (pas d'information sur l'exécution de K sauf si vous le stockez vous-même). – Thilo

6

En raison de type erasure, vous ne pouvez pas savoir ce qui était le paramètre de type lors de la construction de la classe. Mais vous pouvez utiliser element.getClass() pour obtenir le type d'exécution de l'élément (qui est probablement une sous-classe du paramètre type, bien que ce ne soit pas garanti - il aurait pu y avoir une distribution non cochée).

Cependant, certaines astuces permettent d'accéder aux paramètres de type. Il y a quelques astuces que Guice can do. Aussi, si vous créez une sous-classe de Foo, comme ceci: Foo<Integer> foo = new Foo<Integer>(){}; (notez le {} ce qui en fait une sous-classe anonyme de Foo), alors il est possible d'accéder au paramètre type avec ParameterizedType type = (ParameterizedType) foo.getClass().getGenericSuperclass() puis d'appeler les méthodes de ParameterizedType. C'est la caractéristique de l'API de réflexion de Java dont Guice profite également.

Questions connexes