30

私は言うことができる方法を持っています:

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

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

誰かがこれについて考えた場合に備えて。ブール値を使用することを考えましたが、あまり好きではありません。まず、 true/false を left/right に関連付ける方法は? (わかりました、コメントを使用できますが、まだ汚いと思います)そして第二に、「正当化」のような新しい値を追加することにするかもしれません.2つ以上の可能な値がある場合、ブール型は絶対に使用できません.

何か案は?

4

7 に答える 7

60

これはそれを行う必要があります:

private enum Alignment { LEFT, RIGHT };    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  if (align == Alignment.LEFT)
  {
    //Process it...
  }
}
于 2008-09-26T22:59:03.113 に答える
21

スイッチを使用できる列挙型でさらにクール:

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 値ではなく、列挙値の名前になるため、列挙型はクールです。

于 2008-09-27T22:00:10.250 に答える
5

私はこれがずっと好きです。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...
} 
于 2008-11-04T20:00:46.883 に答える
1

もちろん、列挙型を使用できます。次のようなものは機能しますか?

enum Alignment {
    LEFT,
    RIGHT
}

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

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

于 2008-09-26T23:02:05.807 に答える
1

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

于 2008-09-27T06:34:56.823 に答える
1

列挙型を本格的なクラスとして使用するかどうかはわかりません。これはオブジェクト指向言語であり、オブジェクト指向の最も基本的な信条の 1 つは、クラスが 1 つのことを適切に行う必要があるということです。

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

したがって、enum.process() ができるかもしれませんが、そうするべきだという意味ではありません。

于 2013-02-18T06:49:53.777 に答える