with values valueof example enum definicion java parameters methods enums

values - java enum valueof



Java: parámetro Enum en método (7)

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

enum Alignment { LEFT, RIGHT }

Cadena estática privada drawCellValue (int maxCellLength, String cellValue, alineación de alineación) {}

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

Tengo un método digamos:

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

y como pueden ver, tengo un parámetro llamado alinear. Dentro de este método voy a tener alguna condición si el valor es ''left'' o ''right'' ... estableciendo el parámetro como String, 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? (De acuerdo, puedo usar comentarios pero todavía lo encuentro sucio) y en segundo lugar, podría decidir agregar un nuevo valor, como ''justificar'', así que si tengo más de 2 valores posibles, definitivamente no es posible usar el tipo booleano.

¿Algunas ideas?


Esto debería hacerlo:

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


Incluso más fresco con enums 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); } }

Los enum son geniales porque el resultado de la excepción será el nombre del valor enum, en lugar de algún valor int arbitrario.


Me gusta mucho mejor reduce el if / switch, simplemente 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... }


No estoy muy seguro de que vaya a utilizar una enumeración como una 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 debería hacer una cosa y hacerlo bien.

Una enumeración está haciendo un muy buen trabajo al ser una enumeración, y una clase está haciendo un buen trabajo como clase. Mezclar los dos que tengo la sensación 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 pueda enum.process () no significa que deba hacerlo.


Puedes usar una enumeración en dichos parámetros como esta:

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

entonces puede usar una instrucción switch o if para hacer algo con dicho parámetro.

switch(align) { case LEFT: //something case RIGHT: //something default: //something } if(align == Alignment.RIGHT) { /*code*/}


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