Héritage et constantes

Héritage et constantes - Java - Programmation

Marsh Posté le 03-06-2012 à 19:30:51    

Bonjour

 

Je travaille en ce moment sur un petit projet et j'aurais besoin de votre aide.

 

J'ai une classe MaClasse qui a pour variables un certain nombre de constantes (environ 20).
Ces constantes sont donc constantes (:p) tout le long du programme, mais il s'avère qu'elles doivent pouvoir être initialisées de manières différentes selon l'environnement d'exécution du programme (selon la résolution de l'écran pour être exact)
Donc ces constantes ont le mot clef "final" et sont, pour le moment, initialisées dans le constructeur.

 

Ainsi, je dois avoir, pour chaque résolution d'écran que supporte mon programme, avoir une série de déclarations pour chacune de mes constantes.
Si je supporte 10 résolutions, j'ai 10x20 = 200 lignes d'initialisations de constantes au sein même de mon constructeur. (Je trouve ça crado perso)

 

Aussi j'avais pensé passer par une classe externe : Config, qui serait abstraite et donc chacun des membres serait statique final
J'aurais ensuite eu, pour chaque résolution d'écran une classe Config_<resolutiondecran> qui hérite de Config et qui met les variables à la bonne valeur (et comme ça j'ai un fichier par résolution, ce qui me semble plus clean), mais cela ne marche pas.

 

Pourriez vous m'aiguiller sur la manière la plus propre de faire ?

 

Un petit code pour l'exemple :
Actuellement

Code :
  1. public class MaClasse {
  2.     private static final int var; // on suppose qu'on en a 20
  3.     public MaClasse() {
  4.         switch (java.awt.Toolkit.getDefaultToolkit().getScreenSize().height) {
  5.             case 1200:
  6.                 this.var = 34; // ainsi pour chaque variable (comme yen a 20, le constructeur devient très vite très long)
  7.                 break;
  8.            case 1080:
  9.                 this.var = 46;
  10.                 break;
  11.           // ...
  12.             default:
  13.                 throw new RuntimeException("Unsupported Resolution" );
  14.         }
  15.     }
  16.     public void foo(){
  17.         System.out.println(var);
  18.     }
  19. }
 


Ce que j'aimerais faire : (ConfigBuilder est une classe qui va me rendre le bon type de configuration)

Code :
  1. public class MaClasse {
  2.     private static final Config conf = ConfigBuilder.getConfig();
  3.    
  4.     public void foo(){
  5.         System.out.println(conf.var);
  6.     }
  7. }
  8. public abstract class Config {
  9.     public static final int var = 0; // obligé d'initialiser sinon erreur
  10. }
  11. public class Config_1200 extends Config {
  12.     public static final int var = 34;
  13. }
  14. public class ConfigBuilder {
  15.     public static Config getConfig() {
  16.         switch (java.awt.Toolkit.getDefaultToolkit().getScreenSize().height) {
  17.             case 1200:
  18.                 return new Config_1200();
  19.            case 1080:
  20.                 return new Config_1080();
  21.           // ...
  22.             default:
  23.                 throw new RuntimeException("Unsupported Resolution" );
  24.         }
  25.     }
  26. }
 


J'ai bien pensé faire ça dans config que des getters abstraits qui seraient implémentés dans chacune des classes filles, mais je trouve que ca alourdit le reste de mon code où je fais appelle à ces variables (la fonction foo dans l'exemple ci-dessus)

 

Pourriez vous donc m'aider ??

 

Merci d'avance !


Message édité par nisalon_caje le 03-06-2012 à 19:35:03
Reply

Marsh Posté le 03-06-2012 à 19:30:51   

Reply

Marsh Posté le 03-06-2012 à 23:40:07    

L'utilisation d'une interface Config est la bonne solution.
 
Si tu as 10 classes ayant 20 attributs,
toutes implémentant l'interface Config,
je ne les coderai pas en dur,  
mais je les créerai sous forme de beans manipulé en Spring IOC.
 
Donc dans un fichier xml avec un id différent pour chaque bean (1080, 1200 ...)
Le ConfigBuilder allant 'piocher' le bon bean en fonction de l'id.
 
 
 

Reply

Marsh Posté le 04-06-2012 à 23:47:27    

Bonne idée, merci !


---------------
http://nisalon.labrute.com/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed