3 votes

Question sur les génériques en Java

Est-il possible d'écrire une méthode permettant de créer des instances de n'importe quel type spécifié ?

Je pense que les génériques Java devraient aider, donc cela pourrait être quelque chose comme ça :

    public <U> U getObject(Class klass){
        //...
    }

Quelqu'un peut-il m'aider ?

9voto

Peter Štibraný Points 17507
public <U> U getObject(Class<U> klass) 
    throws InstantiationException, IllegalAccessException
{
    return klass.newInstance();
}

Cette méthode présente toutefois quelques "problèmes" :

  • la classe doit avoir un constructeur sans arguments
  • si le constructeur lance une exception vérifiée, il sera propagé même si votre getObject ne le déclare pas dans la méthode throws partie.

Voir Class.newInstance() pour plus de détails.

8voto

Carl Points 4049
 public <U> U genericFactory(Constructor<U> classConstructor, Object..args)
  throws
   InstantiationException,
   IllegalAccessException,
   IllegalArgumentException,
   InvocationTargetException {
     return classConstructor.newInstance(args);
 }

Vous pouvez obtenir un constructeur à partir d'un Class<U> par l'intermédiaire de l'objet getConstructors méthode. Le constructeur lui-même permet d'obtenir des informations sur les arguments. Il est donc nécessaire d'ajouter du code en dehors de cette fabrique pour remplir les arguments de manière appropriée.

Évidemment, c'est tout aussi laid que la réponse de Pierre.

8voto

Je suggère fortement d'utiliser une interface d'usine si possible, plutôt que d'abuser de la réflexion.

public interface MyFactory<T> {
     T newInstance();
}

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