2010-10-27 4 views
0

Est-il possible d'instancier des objets génériques dans Java comme dans le fragment de code suivant? Je sais que c'est possible en C#. Mais, je n'ai pas encore vu un mécanisme similaire en Java.Instanciation d'objets génériques dans Java

// Let T be a generic type. 
T t = new T(); 

Merci d'avance.

+1

double possible: http://stackoverflow.com/questions/1090458/instantiating-a-generic-class-in-java – Mike

+0

Jon Skeet @ Mike est partout :) –

Répondre

8

Non, cela ne fonctionne pas en Java, en raison de l'effacement du type. Au moment où le code est en cours d'exécution, le code ne sait pas ce que T est. Voir le Java Generics FAQ plus d'informations sur les génériques Java que vous n'avez jamais voulu :) - en particulier, voir la section Type Erasure.

Si vous avez besoin de connaître le type de T au moment de l'exécution, pour cette ou d'autres raisons, vous pouvez stocker dans un Class<T> et le prendre dans le constructeur:

private Class<T> realTypeOfT; 

public Foo(Class<T> clazz) { 
    realTypeOfT = clazz; 
} 

Vous pouvez ensuite appeler newInstance() etc.

3

J'ai bien peur que non. Les types génériques en Java sont effacés - ils sont utilisés au moment de la compilation, mais ne le sont pas au moment de l'exécution (ce qui est très pratique dans certains endroits).

Ce que vous pouvez faire est de créer une nouvelle instance à partir de l'objet Class.

Class<T> myClass; 
T t = myClass.newInstance();