Pergunta

Eu tenho um método permite dizer:

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

e, como você pode notar, eu tenho um parâmetro chamado align. Dentro deste método que eu vou ter algum se a condição de se o valor é uma 'esquerda' ou 'direita' .. definir o parâmetro como String, obviamente, eu posso passar qualquer valor de string .. Eu gostaria de saber se é possível ter um valor de enumeração como um parâmetro de método, e se sim, como?

Apenas no caso de alguém pensa sobre isso; Pensei em usar um valor booleano, mas eu realmente não gosta dele. Em primeiro lugar, como associar verdadeiro / falso com a esquerda / direita? (Ok, eu posso usar os comentários, mas eu ainda encontrá-lo sujo) e em segundo lugar, eu poderia decidir adicionar um novo valor, como 'justificar', então se eu tiver mais de 2 valores possíveis, tipo booleano definitivamente não é possível usar.

Todas as idéias?

Foi útil?

Solução

Isso deve fazê-lo:

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

Outras dicas

refrigerador Mesmo com enums você pode usar switch:

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

   }
}

Enums são arrefecer porque a saída da exceção será o nome do valor enum, ao invés de algum valor int arbitrária.

I como este muito melhor. reduz o if / switch, apenas fazer.

private enum Alignment { LEFT, RIGHT;

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

é claro, ele pode ser:

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

Claro, você poderia usar um enum. Será que algo como o seguinte trabalho?

enum Alignment {
    LEFT,
    RIGHT
}

private static string drawCellValue (int maxCellLength, String CellValue, alinhamento alinhamento) {}

Se você quiser usar um booleano, você pode renomear o parâmetro align para algo como AlignLeft. Concordo que esta implementação não é tão limpo, mas se você não antecipar um monte de mudanças e isso não é uma interface pública, pode ser uma boa escolha.

Você também pode reutilizar SwingConstants. {ESQUERDA, DIREITA}. Eles não são enums, mas eles já existem e são usados ??em muitos lugares.

Eu não estou muito certo que eu iria e usar um enum como uma classe de pleno direito - esta é uma linguagem orientada a objetos, e um dos mais princípios básicos de orientação a objetos é que uma classe deve fazer uma coisa e fazê-lo bem .

Uma enumeração está fazendo um trabalho muito bom em ser um enum e uma classe está fazendo um bom trabalho como uma classe. Misturando os dois que eu tenho um sentimento vai trazer-lhe problemas -. Por exemplo, você não pode passar uma instância de uma enumeração como um parâmetro para um método, principalmente porque você não pode criar uma instância de um enum

Assim, mesmo que você pode ser capaz de enum.process () não significa que você deve.

Você pode usar um enum nos referidos parâmetros como este:

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

então você pode usar um switch ou if para realmente fazer alguma coisa com o dito parâmetro.

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

if(align == Alignment.RIGHT) { /*code*/}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top