Je travaille sur une application Java. Il s'agit d'un modèle de classe abstraite et de 2 classes dérivées Model 1 et Model 2. Model1 et Model2 se comportent différemment, donc je veux permettre à l'utilisateur de sélectionner un modèle parmi les deux. Il peut être mis en œuvre comme:Java, liste des types de classes
Model model;
If(response==1){
model = new Model1();
}else if(response==2){
model = new Model2();
}
Maintenant, le problème avec ceci est que si j'ajoute une nouvelle classe Model3, je dois réécrire le code. Je pourrais créer une liste, où j'ajouterais une instance de chaque classe, puis j'ajouterais une méthode statique, qui retournerait une nouvelle instance de la classe, mais j'espère que cela peut être fait avec un peu plus de style.
Est-il possible de créer une liste, pour contenir le type de chaque classe. À partir de cette liste, je pourrais créer un menu pour sélectionner un modèle, puis utiliser le type pour créer la classe dont l'utilisateur a besoin.
Alors, est-il possible de créer un List<Class>
, puis d'utiliser l'objet Class en tant que constructeur pour créer une instance de la classe donnée?
+1 pour ne pas utiliser de réflexion.Parfois, vous devez, cependant (si vous ne connaissez pas la classe au moment de la compilation, par exemple) –
@StevenSchlansker, je suis d'accord qu'il existe des utilisations pour la réflexion. Je préfère le limiter aux frontières entre les systèmes d'objets Java et d'autres systèmes - le système de fichiers, les ORM, les langages de script intégrés. Si vous travaillez entièrement en Java, il existe souvent une meilleure façon de l'utiliser qui n'affecte pas la capacité des mainteneurs à refactoriser le code, suivre le déroulement du programme, etc. –