107 votes

Instanciation d'un objet de type paramètre

J'ai une classe de modèle comme suit :

class MyClass<T>
{
    T field;
    public void myMethod()
    {
       field = new T(); // gives compiler error
    }
}

Comment puis-je créer une nouvelle instance de T dans ma classe ?

14voto

Dan Hodge Points 51

Cela peut être plus lourd que ce que vous cherchez, mais cela fonctionnera également. Notez que si vous adoptez cette approche, il serait plus logique d'injecter l'usine dans MyClass lorsqu'elle est construite au lieu de la passer dans votre méthode chaque fois qu'elle est appelée.

interface MyFactory<T> 
{
    T newObject();
}

class MyClass<T> 
{
    T field;
    public void myMethod(MyFactory<T> factory)
    {
       field = factory.newObject()
    }
}

4voto

Jonas Kongslund Points 2262

MODIFIER : Désolé. J'ai oublié que vous utilisez Java. Le code ci-dessous fonctionne en C#.


Utilisez la contrainte new().

Exemple :

class Test<T> where T : new()
{ 
  T obj; 

  public Test()
  { 
    obj = new T(); // create a T object 
  } 
}

1voto

krosenvold Points 35979

Si vous êtes prêt à sous-classer, vous pouvez également éviter l'effacement, consultez http://www.artima.com/weblogs/viewpost.jsp?thread=208860

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X