Salut,

Il y a le TypeSafeEnum pattern :)
Moi je trouve ca tr�s bien :
http://www.javaworld.com/javaworld/jw-07-1997/jw-07-enumerated_p.html
Je crois que c'est la bonne adresse. En gros c'est un truc comme ca :
public class final Layer {
public static final Layer LAYER1 = new Layer("1");
public static final Layer LAYER2 = new Layer("2");
public static final Layer LAYER3 = new Layer("3");

private String _iIdLayer = null;

private Layer(String pId) {
    _iIdLayer = pId;
}

public String toString() {
    return _iIdLayer;
}
}

Si je fais pas d'erreur... A toi de jouer avec les final et les protected pour donner plus ou moins de libert� avec l'h�ritage...


Mais il semblerait qu'il ne soit pas si safe que �a (dans certains cas) :
http://www.javaworld.com/javaworld/javatips/jw-javatip122.html (encore un article que je dois lire)


Perso je l'utilise certaines fois et pas de probl�mes, mais je dois pas �tre dans les cas critiques d�crit dans l'article ci dessus. A toi de voir si tu y es.

Bruno

David MARQUES wrote:

j'ai une classe qui contient 3 attributs final static :
public static final int LAYER1 = 1;
public static final int LAYER2 = 2;
public static final int LAYER3 = 3;
quel est la mani�re la plus �l�gante de s'assurer que d'autres classes utilisant ces contantes ne sorte pas des clous (valeur non autoris�e), avec des apppels du style :
objet.methode(4);
alors que methode doit seulement pouvoir �tre utilisable avec seulement mes valeurs de constantes.
j'ai bien une solution :
public static final int LAYER1 = 1;
public static final int LAYER2 = 2;
public static final int LAYER3 = 3;
private static final int [] layerPossibleValues = {LAYER1, LAYER2, LAYER3};


avec une m�thode de v�rification de la valeur dans ma classe du style :

public static boolean isValidLayerNumber(int layerNumber) {

for (int i = 0; i < layerPossibleValues.length; i++) {
int layerpossiblevalue = layerPossibleValues[i];
if (layerNumber == layerpossiblevalue)
return true;
}
return false;
}
un peu lourd, s'il faut v�rifier � chaque utilisation,
ou une m�thode d'obtention de valeur pour chaque valeur possible :


   public static int getLayer1() {
       return LAYER1;
   }



mais je pense qu'il doit y avoir mieux. non ?

merci

_____________________________________________________________________
Envie de discuter en "live" avec vos amis ? T�l�charger MSN Messenger
http://www.ifrance.com/_reloc/m la 1�re messagerie instantan�e de France







Répondre à