J'essaie d'utiliser Réflexion en java à
instancier un joueur avec un motif de commande aime ci-dessous:Quelle est la meilleure façon d'instancier une classe en utilisant Reflection avec le polymorphisme?
Il n'y a qu'un seul 'exécuter' méthode dans un Classe de commande,
Et le InitiatePlayerCommand comme son nom, il instanciera un
sous-classe du joueur selon le playerClass passé dans le constructeur.
J'ai deux types de sous-classe de la classe du joueur: HumanPlayer et AiPlayer pour le polymorphisme.
j'attendre instanciera un d'entre eux sous-classe et ajouter dans le JOUEURS
, mais je ne sais pas quelle est la meilleure façon d'atteindre ce avec la réflexion. Il se produit toujours une erreur de typage.
public class InitiatePlayerCommand implements Command{
private List<Player> playerList;
private String name;
private WarMode warMode;
private Class<?> playerClass;
public <T extends Player> InitiatePlayerCommand(String name, WarMode mode ,List<Player> list
,Class<T> playerClass){
this.name = name;
this.warMode = mode;
this.playerList = list;
this.playerClass = playerClass;
}
@Override
public void execute() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
Player player = (Player) playerClass.newInstance();
player.setName(name);
player.setWarMode(warMode);
playerList.add(player);
}
public static void main(String[] argv){
List<Player> playerList = new ArrayList<Player>();
new InitiatePlayerCommand("Johnny",WarMode.MILITARY,playerList,HumanPlayer.class)
.execute(); // this line get an error HumanPlayer.class isn't compatible to Class<T extends Player> playerClass
System.out.println(playerList);
}
}
Est-il possible d'atteindre cet sans utiliser la classe <? >
fonctionne bien pour moi. –