10

次のような列挙型を作成できることを理解しています。

public enum MyEnum {
   ONE(1),
   TWO(2);
   private int value;
   private MyEnum(int value) {
      this.value = value);
   }
   public int getValue() {
      return value;
   }
}

しかし、私はいくつかの質問があります:

1)列挙値は最初に宣言されているようです。このための特定の形式はありますか?どこでも宣言できますか?

2)複数のコンストラクターで列挙型を宣言することは可能ですか?これは人々が時々行うことですか?

4

3 に答える 3

11
public enum MyEnum {
   ONE(1),
   TWO(1, 2);
   private int value1, value2;

   private MyEnum(int value) {
      this.value1 = value;
      this.value2 = 0; // default
      // this.value2 = getFromSomewhereElse(); // get it at runtime
   }

   private MyEnum(int value1, int value2) {
      this.value1 = value1;
      this.value2 = value2;
   }

   public int getValue1() {
      return this.value1;
   }

   public int getValue2() {
      return this.value2;
   }
}
  1. はい、最初に列挙値を宣言する必要があります。いつも。
  2. 上記のコードを参照してください。可能です。人々がそうするかどうかは、アプリケーションによって異なります。多くのフィールドがあり、それらのほとんどがデフォルト値である必要がある場合は、複数のコンストラクターを使用することをお勧めします。また、フィールドの値は、実行時に(ファイルまたは別の静的クラスから)読み取ることができます。
于 2012-06-14T16:33:18.183 に答える
8
  1. はい、enumクラスの他のフィールドの前に宣言する必要があります。
  2. はい、複数のコンストラクターを持つことができます。

自分で試してみて発見できたはずです。

于 2012-06-14T16:28:33.407 に答える
4
  1. JLS 7によると、定数が最初になります。

  2. 「enum宣言内のコンストラクターまたはメンバー宣言は、特に明記されていない限り、通常のクラス宣言のクラス本体に存在する場合とまったく同じようにenum型に適用されます。」および「列挙型のコンストラクター宣言がパブリックまたは保護されている場合は、コンパイル時エラーです。」(同上、8.9.2)

于 2012-06-14T16:30:47.650 に答える