2010-07-30 11 views

risposta

7

Da una combinazione di tipi anonimi, sottoclassi e il fatto che Java non cancella completamente TUTTE le dichiarazioni generiche.

Se si guarda da vicino il TypeLiteral ha un costruttore protetto, quindi si utilizza un ulteriore {} quando si costruisce uno nuovo che crea una sottoclasse anonima di TypeLiteral.

In Java le dichiarazioni generiche vengono mantenute su dichiarazioni di classi e metodi, quindi se scrivo questo.

public abstract class Class1<T> 
{ 
} 

public class Class2 extends Class1<Integer> 
{ 
} 

posso effettivamente scrivere codice in Class1 che può capire che il proprio tipo generico è Integer se Class2 era la sottoclasse.

Controlla l'API java.lang.Class per i metodi appropriati (hanno un nome generico nel nome).