Envoyé par
R1beLlu2B
J'ai une erreur sur le code :
1 2 3 4 5 6 7 8
| if (e.getKeyCode() == NativeKeyEvent.VC_F8) {
if ( Main.configManager==ConfigManager.getInstance() ) {
Main.configManager=ConfigManager2.getInstance(); //la ligne reste surligne en rouge
}
else {
Main.configManager=ConfigManager.getInstance();
}
} |
Incompatible typeRequired:
r1bellu2b.norecoil.ConfigManager
Found:
r1bellu2b.norecoil.ConfigManager2
C'est parce que tu as fait 2 classes, ConfigManager et ConfigManager2, pour gérer les 2 "gestionnaires de configuration", et que ConfigManager2 ce n'est pas ConfigManager. Il n'y a pas de raison de faire 2 classes, puisque dans les deux cas, c'est la même chose que tu veux représenter (d'ailleurs les 2 classes doivent être exactement pareilles, à part le 2 dans le nom. Il faut surtout que configs ne soit pas static (sinon c'est partagé entre les instances de ConfigManager). Ce genre de variable static empêche de faire plusieurs instances de la même classe entre autres : c'est une mauvaise pratique que de faire des variables statiques (pour une souplesse maximum, seule la méthode main devrait être static dans ton programme).
Regarde dans le dernier exemple que je t'ai donné : j'ai mis les deux instances de gestionnaire dans ConfigManager, avec deux instances différentes, et deux méthodes différentes getInstance() et getInstance2().
L'important c'est que static ConfigurationManager configManager; soit de la classe ConfigurationManager. Si tu veux continuer à avoir 2 classes, tu pourrais faire quelque chose comme ça, pour la classe ConfigurationManager, en déclarant le constructeur public au lieu de private :
1 2 3 4 5 6 7
| public class ConfigurationManager {
/*... le reste du code ne change pas */
public ConfigurationManager(String nom) {
/*... le reste du code ne change pas */
}
/*... le reste du code ne change pas */
} |
Tu supprimes juste la méthode getInstance(), et la déclaration de la variable ourInstance.
puis tu fais deux classes :
1 2 3 4 5 6
| public class ConfigurationManager1 {
private static ConfigurationManager configurationManager = new ConfigurationManager("Config manager 1");
public static ConfigurationManager getInstance() {
return configurationManager;
}
} |
1 2 3 4 5 6
| public class ConfigurationManager2 {
private static ConfigurationManager configurationManager = new ConfigurationManager("Config manager 2");
public static ConfigurationManager getInstance() {
return configurationManager;
}
} |
Ainsi, tu peux appeler ConfigrationManager1.getInstance() ou ConfigurationManager2.getInstance() selon. Mais c'est juste une histoire de nom.
Il y a également ce moyen, avec une enum :
1 2 3 4 5 6 7 8 9 10 11
| public enum ConfigurationManager {
CONFIGMANAGER1,
CONFIGMANAGER2;
private List<Config> configs = new ArrayList<>();
private int currentConfig = 0;
/* reste du code pareil qu'actuellement, mais aucun static */
} |
Tu n'as même plus besoin de variable ourInstance et de méthode getInstance(). On peut directement accéder à un ConfigurationManager :
1 2 3 4 5 6 7 8
| if (e.getKeyCode() == NativeKeyEvent.VC_F8) {
if ( Main.configManager==ConfigManager.CONFIGMANAGER1 ) {
Main.configManager=ConfigManager.CONFIGMANAGER2;
}
else {
Main.configManager=ConfigManager.CONFIGMANAGER1;
}
} |
(voir utiliser le même système que pour VitesseChoix, avec la méthode next, pour cycler sur les différents "Config Manager", c'est exactement pareil finalement.
et pour afficher le nom :
g2.drawString(Main.configManager.name(), x, y);
Partager