Frage

Ich habe eine Methode können sagen:

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

und wie Sie feststellen können, habe ich einen Parameter namens align. Innerhalb dieser Methode werde ich auf etwas, wenn die Bedingung haben, ob der Wert ein ‚links‘ oder ‚rechts‘ .. die Parameter als String Einstellung, natürlich kann ich .. jeden String Wert übergeben würde ich gerne wissen, ob es möglich ist, einen Enum-Wert als Methodenparameter zu haben, und wenn ja, wie?

Für den Fall, jemand denkt darüber; Ich dachte über einen Booleschen Wert verwenden, aber ich weiß nicht wirklich Lust es. Erstens, wie mit links wahr / falsch / richtig zuordnen? (Ok, kann ich Kommentare benutzen, aber ich es noch schmutzig finden), und zweitens könnte ich entscheiden, einen neuen Wert zu schreiben, ‚rechtfertigen‘, also, wenn ich mehr als zwei mögliche Werte habe, Boolean Typ ist definitiv nicht möglich zu nutzen.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Das sollte es tun:

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

Andere Tipps

Auch Kühler mit Aufzählungen Sie Schalter verwenden können:

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

   }
}

Aufzählungen sind cool, weil der Ausgang der Ausnahme wird der Name des ENUM-Wertes, anstatt ein willkürlicher int-Wert.

Ich mag dies viel besser. reduziert den if / Schalter, nur tun.

private enum Alignment { LEFT, RIGHT;

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

natürlich, es kann sein:

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

Sicher, man könnte eine ENUM nutzen. Wäre so etwas wie die folgende Arbeit?

enum Alignment {
    LEFT,
    RIGHT
}

private static String drawCellValue (int maxCellLength, String Cellvalue, Ausrichtung Ausrichtung) {}

Wenn Sie eine boolean verwenden wollten, könnten Sie die align Parameter so etwas wie Alignleft umbenennen. Ich bin damit einverstanden, dass diese Umsetzung nicht so sauber ist, aber wenn Sie viele Änderungen nicht antizipieren und dies ist nicht eine öffentliche Schnittstelle, könnte es eine gute Wahl sein.

Sie können auch SwingConstants wiederzuverwenden. {LINKS, RECHTS}. Sie sind nicht Aufzählungen, aber sie existieren bereits und werden in vielen Orten verwendet.

Ich bin nicht sicher, ich würde eine ENUM als vollwertigen Klasse gehen und nutzen - das ist eine objektorientierte Sprache, und eine der grundlegenden Lehren der Objektorientierung ist, dass eine Klasse eine Sache tun sollte und tut es auch .

Ein ENUM macht einen ziemlich guten Job bei einer Enum zu sein, und eine Klasse einen guten Job als Klasse tut. Das Mischen der beiden ich das Gefühl haben, werden Sie in Schwierigkeiten geraten -. Zum Beispiel, kann man nicht eine Instanz eines ENUM als Parameter an eine Methode übergeben, in erster Linie, weil Sie nicht eine Instanz eines Enum erstellen

Also, auch wenn Sie enum.process vielleicht in der Lage () bedeutet nicht, dass Sie sollten.

Sie können mit ein Enum in den Parametern wie folgt aus:

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

, dann können Sie entweder einen Schalter verwenden oder wenn Aussage etwas tatsächlich zu tun mit dem Parameter.

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

if(align == Alignment.RIGHT) { /*code*/}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top