Pregunta

Tengo un método, digamos:

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

y como pueden notar, tengo un parámetro llamado alinear. Dentro de este método voy a tener alguna condición si el valor es 'izquierdo' o 'correcto' ... estableciendo el parámetro como Cadena, obviamente puedo pasar cualquier valor de cadena ... Me gustaría saber si es posible tener un valor Enum como parámetro de método, y si es así, ¿cómo?

En caso de que alguien piense en esto; Pensé en usar un valor booleano, pero realmente no me gusta. Primero, ¿cómo asociar verdadero / falso con izquierda / derecha? (Ok, puedo usar comentarios, pero aún lo encuentro sucio) y, en segundo lugar, puedo decidir agregar un nuevo valor, como 'justificar', así que si tengo más de 2 valores posibles, definitivamente no se puede usar el tipo Boolean.

¿Alguna idea?

¿Fue útil?

Solución

Esto debería hacerlo:

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

Otros consejos

Incluso más fresco con enumeraciones puedes usar el interruptor:

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);

   }
}

Las enumeraciones son geniales porque la salida de la excepción será el nombre del valor de enumeración, en lugar de algún valor int arbitrario.

Me gusta esto mucho mejor. reduce el if / switch, solo hazlo.

private enum Alignment { LEFT, RIGHT;

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

por supuesto, puede ser:

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

Claro, podrías usar una enumeración. ¿Algo como el siguiente trabajo?

enum Alignment {
    LEFT,
    RIGHT
}

String estático privado StringValue (int maxCellLength, String cellValue, alineación de alineación) {}

Si quisiera usar un booleano, podría cambiar el nombre del parámetro align a algo como alignLeft. Estoy de acuerdo en que esta implementación no es tan limpia, pero si no anticipa muchos cambios y esta no es una interfaz pública, podría ser una buena opción.

También puede reutilizar SwingConstants. {IZQUIERDA, DERECHA}. No son enumeraciones, pero ya existen y se usan en muchos lugares.

No estoy muy seguro de usar una enumeración como clase completa: este es un lenguaje orientado a objetos, y uno de los principios más básicos de la orientación a objetos es que una clase debe hacer una cosa y hacerlo bien. .

Una enumeración está haciendo un buen trabajo al ser una enumeración, y una clase está haciendo un buen trabajo como clase. Mezclar los dos tengo la sensación de que te meterá en problemas, por ejemplo, no puedes pasar una instancia de una enumeración como parámetro a un método, principalmente porque no puedes crear una instancia de una enumeración.

Por lo tanto, aunque puedas enumerar.process () no significa que debas hacerlo.

Puede usar una enumeración en dichos parámetros como este:

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

entonces puede usar un modificador o if en realidad para hacer algo con dicho parámetro.

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

if(align == Alignment.RIGHT) { /*code*/}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top