Question

J'ai une méthode, disons:

private static String drawCellValue(
    int maxCellLength, String cellValue, String align) { }

et comme vous pouvez le constater, j’ai un paramètre appelé align. Dans cette méthode, je vais avoir quelques conditions si sur si la valeur est une 'gauche' ou 'une droite' .. en définissant le paramètre comme String, évidemment je peux passer n'importe quelle valeur de chaîne .. J'aimerais savoir si c'est possible d'avoir une valeur Enum en tant que paramètre de méthode, et si oui, comment?

Juste au cas où quelqu'un y penserait; J'ai pensé à utiliser une valeur booléenne, mais je ne le souhaite pas vraiment. Premièrement, comment associer vrai / faux avec gauche / droite? (Ok, je peux utiliser des commentaires mais je le trouve toujours sale) et deuxièmement, je pourrais décider d'ajouter une nouvelle valeur, telle que "justifier", donc si j'ai plus de 2 valeurs possibles, le type booléen n'est définitivement pas possible.

Des idées?

Était-ce utile?

La solution

Cela devrait le faire:

private enum Alignment { LEFT, RIGHT };    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  if (align == Alignment.LEFT)
  {
    //Process it...
  }
}

Autres conseils

Même plus frais avec des enums, vous pouvez utiliser le commutateur:

switch (align) {
   case LEFT: { 
      // do stuff
      break;
   }
   case RIGHT: {
      // do stuff
      break;
   }
   default: { //added TOP_RIGHT but forgot about it?
      throw new IllegalArgumentException("Can't yet handle " + align);

   }
}

Les énumérations sont cool parce que la sortie de l'exception sera le nom de la valeur enum, plutôt qu'une valeur int arbitraire.

J'aime beaucoup mieux ça. réduit le si / commutateur, il suffit de faire.

private enum Alignment { LEFT, RIGHT;

void process() {
//Process it...
} 
};    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  align.process();
}

bien sûr, ça peut être:

String process(...) {
//Process it...
} 

Bien sûr, vous pourriez utiliser une énumération. Est-ce que quelque chose comme le travail suivant?

enum Alignment {
    LEFT,
    RIGHT
}

Chaîne statique privée drawCellValue (int maxCellLength, String cellValue, Alignement de l'alignement) {}

Si vous voulez utiliser un booléen, vous pouvez renommer le paramètre align comme suit: alignLeft. Je conviens que cette implémentation n’est pas aussi simple, mais si vous ne prévoyez pas beaucoup de changements et que ce n’est pas une interface publique, ce sera peut-être un bon choix.

Vous pouvez également réutiliser SwingConstants. {GAUCHE, DROITE}. Ce ne sont pas des énumérations, mais elles existent déjà et sont utilisées dans de nombreux endroits.

Je ne suis pas sûr d’utiliser un enum comme classe à part entière - c’est un langage orienté objet, et l’un des principes de base de l’orientation objet est qu’une classe doit faire une chose et bien le faire. .

Une enum fait un très bon travail en tant qu’énum, ??et une classe fait du bon travail en tant que classe. En mélangeant les deux, j'ai le sentiment que cela vous causera des problèmes. Par exemple, vous ne pouvez pas passer une instance d'enum en tant que paramètre d'une méthode, principalement parce que vous ne pouvez pas créer d'instance d'enum.

Ainsi, même si vous pouvez pouvoir enum.process () ne signifie pas que vous devriez le faire.

Vous pouvez utiliser une énumération dans ces paramètres comme ceci:

public enum Alignment { LEFT, RIGHT }
private static String drawCellValue(
int maxCellLength, String cellValue, Alignment align) {}

alors vous pouvez utiliser un commutateur ou une instruction if pour faire quelque chose avec ce paramètre.

switch(align) {
case LEFT: //something
case RIGHT: //something
default: //something
}

if(align == Alignment.RIGHT) { /*code*/}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top