1

クラスで大きな列挙型が宣言されています

public enum CarMaker{
        Honda,
        Toyota,
        Sony,
        ...;

        public CarMaker at(int index){ //a method to retrieve enum by index
                CarMaker[] retval = this.values();
                return retval[index];
        }
        public final SomeObj val; //a value associated with each enum
            //.. more custom functions if needed
    }

各CarMakerのインスタンスは1つしか必要ないため、この列挙型をストレージとして使用する場合は悪い習慣です(配列のように、代わりにインデックスを使用して各要素にアクセスするため、より直感的な名前を使用できます。また、カスタム関数を使用することもできます。各要素について)

CarMaker A = CarMaker.Honda;
CarMaker B = CarMaker.at(1); 
//Error above b/c 'at' is not a static member, can I make at a static member?

A.val = 5; 
B.val = 6; 
//Here I want A to be share data with B since both are "Honda"
//but it doesn't seem to do that yet
 System.out.println(A)
 System.out.println(B)

//Expected output:
//A: 6
//B: 6

今のところAとBは「ホンダ」の独自のインスタンスを作成しているようですが、共有してほしいです。出来ますか?

4

2 に答える 2

5

enumsは不変の定数であると想定されています。彼らに公開された変更可能なフィールドを与えることは恐ろしい考えです。

于 2012-05-11T00:00:53.537 に答える
2

列挙型を使用しますが、構成を使用します。ブランド名の列挙型を作成しますが、列挙型のフィールドを保持するための名前が必要なオブジェクトを作成します。

public enum CarMaker {
   Honda,
   Toyota,
   Sony,
   Olympus,
   Facebook,
   Google,
   ...
}

public class Car {
   CarMaker carMaker;
   //... etc....

   Car(CarMaker carMaker) {
      this.carMaker = carMaker;
      // ... more code
   }

   //....
于 2012-05-11T00:07:12.443 に答える