2010-10-16 4 views
0

que je veux faire quelque chose commeJava question de l'utilisation générique

public class Container<C extends Member> { 

    public void foo() { 
     C newC = new C(); 
    } 
} 

Je me rends compte que cela ne fonctionnera pas, mais ce qui est le langage Java correct pour cela?

+0

Je ne suis pas sûr de comprendre ce que "ceci" est donné à votre exemple. Pourriez-vous décrire la question différemment? – Manius

Répondre

1

L'idiome typique est indroducing une balise de type passé dans le constructeur:

public class Container<C extends Member> { 
    private Class<C> tag; 

    public Container(Class<C> tag) { 
     this.tag = tag; 
    } 

    public void foo() { 
     C newC = tag.newInstance(); 
    } 
} 
2

Le type générique C est effacé lors de l'exécution à java.lang.Object. Il n'y a aucun moyen d'instancier un type générique effacé. Il semble plus que vous voulez une sorte de modèle de création d'usine? Si tel est le cas, vous pouvez envisager d'utiliser l'injection de dépendances et les frameworks tels que Spring ou Guice.