質問

言うことができるメソッドがあります:

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

お気づきのとおり、alignというパラメーターがあります。このメソッド内では、値が「左」または「右」かどうかのif条件があります。パラメータを文字列として設定すると、明らかに任意の文字列値を渡すことができます。それが可能かどうかを知りたいメソッドパラメータとしてEnum値を使用する場合

誰かがこれについて考える場合に備えて;ブール値を使用することを考えましたが、あまり気に入らないです。最初に、true / falseをleft / rightと関連付ける方法は? (OK、コメントは使用できますが、それでも汚れています)そして次に、「justify」などの新しい値を追加することを決定する可能性があります。したがって、可能な値が3つ以上ある場合、ブール型は使用できません。

アイデアはありますか

役に立ちましたか?

解決

これでうまくいくはずです:

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

他のヒント

スイッチを使用できる列挙型のクーラーでも:

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

   }
}
例外の出力は、任意のint値ではなく、列挙値の名前になるため、

列挙はクールです。

これはとても気に入っています。 if / switchを減らしてください。

private enum Alignment { LEFT, RIGHT;

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

もちろん、

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

もちろん、enumを使用できます。次のように動作しますか?

enum Alignment {
    LEFT,
    RIGHT
}

private static String drawCellValue(int maxCellLength、String cellValue、Alignment alignment){}

ブール値を使用する場合は、alignパラメーターの名前をalignLeftなどに変更できます。この実装はそれほどクリーンではないことに同意しますが、多くの変更を予期せず、これがパブリックインターフェイスでない場合は、良い選択かもしれません。

SwingConstantsを再利用することもできます。{LEFT、RIGHT}。それらは列挙型ではありませんが、すでに存在し、多くの場所で使用されています。

列挙型を本格的なクラスとして使用するかどうかはよくわかりません-これはオブジェクト指向言語であり、オブジェクト指向の最も基本的な考え方の1つは、クラスが1つのことを実行し、それをうまく行うことです。

enumはenumとしてかなり良い仕事をしており、クラスはクラスとして良い仕事をしています。私が感じている2つを混ぜると問題が発生します-たとえば、主に列挙型のインスタンスを作成できないため、列挙型のインスタンスをパラメーターとしてメソッドに渡すことはできません。

したがって、enum.process()を使用できる場合でも、そうする必要があるという意味ではありません。

次のように、上記のパラメーターで列挙型を使用できます。

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

その後、switchまたはifステートメントを使用して、実際に上記のパラメーターで何かを行うことができます。

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

if(align == Alignment.RIGHT) { /*code*/}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top