2010-04-01 23 views

risposta

6

element.getClass().getSimpleName() probabilmente farà ciò che ti aspetti.

+0

Would K.class.getSimpleName() fa anche il trucco? Sono passati più di 10 anni da quando avevo java così mi mancavano i farmaci generici. Potrei sbagliarmi. – spender

+0

Ma se la variabile elemento non è inizializzata, esiste un altro modo per ottenere il tipo senza ottenere un'eccezione del puntatore nullo? –

+3

K.class non funzionerà (probabilmente nemmeno compila). E sì, è necessario il controllo nullo. E no, non c'è altro modo a causa della cancellazione dei tipi (nessuna informazione di runtime su K a meno che non la si memorizzi da soli). – Thilo

6

A causa di type erasure, non è possibile sapere quale sia il parametro di tipo durante la creazione della classe. Ma puoi usare element.getClass() per ottenere il tipo di runtime dell'elemento (che è probabilmente una sottoclasse del parametro type, sebbene non sia garantito - potrebbe esserci un cast non controllato).

Tuttavia, alcuni trucchi consentono di accedere ai parametri del tipo. Ci sono alcuni trucchi che Guice can do. Inoltre, se crei una sottoclasse di Foo, come questa: Foo<Integer> foo = new Foo<Integer>(){}; (nota la {} che la rende una sottoclasse anonima di Foo), allora è possibile accedere al parametro type con ParameterizedType type = (ParameterizedType) foo.getClass().getGenericSuperclass() e quindi chiamare i metodi di ParameterizedType. Questa è la caratteristica dell'API di riflessione di Java di cui anche Guice si avvale.

Problemi correlati