2011-01-17 12 views
5

La cancellazione di tipo dovrebbe cancellare tutte le informazioni generiche ... Se questo è il caso, in che modo una libreria come GSON utilizza i generici per determinare il tipo di deserializzazione?Tipo di cancellazione in Java

ad es.

private Map<String,Date> tenordates; 

Ciò deserializzare a <String,Date> dove, come

private Map<Date,Date> tenordates; 

si deserializzare a <Date,Date>

così in qualche modo la sua utilizzando le informazioni generiche in fase di esecuzione.

+2

può essere una riflessione .. Non ho controllato il codice. –

+0

possibile duplicato di [getSimpleNameWithGenerics (Classe clazz)] (http://stackoverflow.com/questions/4707042/getsimplenamewithgenericsclass-clazz) – bmargulies

risposta

5

La cancellazione del tipo non cancella tutte le informazioni sul tipo. Non lo elimina dalla classe, dal campo, dal tipo di ritorno e dalle definizioni dei parametri. Le informazioni di tipo negli esempi seguenti viene mantenuta:

public class Foo extends List<Bar> { ..} 

private List<Foo> foos; 

public List<Foo> getFoos() {..} 

public void doSomething(List<Foo> foos) {..} 

Questo è accessibile tramite la riflessione - il java.lang.reflect.ParameterizedType. È possibile verificare se una determinata classe Type è instanceof, eseguire il cast e ottenere le informazioni sul tipo.

Problemi correlati