2

互いに相互参照する2つの列挙型があります。それぞれに、他の列挙型のパラメーターを持つコンストラクターがあります。

それらは次のようになります。

SchoolEnum(ImmuneEnum value)
{
   this.immune = value;
}

ImmuneEnum(SchoolEnum value)
{
   this.school = value;
}

ただし、最初に呼び出す Enum によっては、参照変数の null 値を取得できます。

ImmunityEnum immune = ImmunityEnum.IMMUNE_KANNIC; 
SchoolEnum school = SchoolEnum.KANNIC;
System.out.println(school.getImmune())
System.out.println(immune.getSchool());

出力を生成します: null Kannic

SchoolEnum school = SchoolEnum.KANNIC;
ImmunityEnum immune = ImmunityEnum.IMMUNE_KANNIC; 
System.out.println(school.getImmune())
System.out.println(immune.getSchool());

出力を生成します: immunokannic null

列挙型がいつインスタンス化されるかについては、少し「鶏と卵」の問題のようです。しかし、それぞれが他のものを適切に参照する方法はありますか? 2 つを人為的に相互参照する 2 つのシングルトン ハッシュマップを作成することを検討していますが、より良いアイデアはありますか?

4

3 に答える 3

2

それは世界で最も美しい解決策ではありませんが、後で相互参照を設定するのはどうですか?:

enum SchoolEnum {
    KANNIC;
    private ImmunityEnum immune;
    public ImmunityEnum getImmune() {
        return immune;
    }
    public void setImmune(ImmunityEnum immune) {
        this.immune = immune;
    }
}

enum ImmunityEnum {
    IMMUNE_KANNIC;
    private SchoolEnum school;
    public SchoolEnum getSchool() {
        return school;
    }
    public void setSchool(SchoolEnum school) {
        this.school = school;
    }
}

次のように使用します。

SchoolEnum school = SchoolEnum.KANNIC;
school.setImmune(ImmunityEnum.IMMUNE_KANNIC);
ImmunityEnum immune = ImmunityEnum.IMMUNE_KANNIC; 
immune.setSchool(SchoolEnum.KANNIC);

System.out.println(school.getImmune());
System.out.println(immune.getSchool());
于 2012-01-20T01:30:34.547 に答える
1

String パラメーターをコンストラクターに渡すとどうなるでしょうか。

public enum SchoolEnum {
   Kannic("immnunekannic");
   private String immune;
   public SchoolEnum (String immune) {this.immune = immune;}
   public ImmuneEnum getImmune() {
       return ImmuneEnum.valueOf(immune);
   }
}

public enum ImmnueEnum {
   immunekannic("Kannic");
   private String scholl;
   public ImmnueEnum (String school) {this.school = school;}
   public SchoolEnum getSchool() {
       return SchoolEnum.valueOf(school);
   }
}

しかし、正直なところ、このタイプのドメイン モデルを作成するのは少し奇妙です。あなたのユースケースは何ですか?

于 2012-01-20T01:22:43.723 に答える
0
public enum SchoolEnum  {
  KANNIC {

    @Override
    public ImmunityEnum  getImmune() {
      return ImmunityEnum.IMMUNE_KANNIC;
    }
  };

  public abstract ImmunityEnum getImmune();
}

public enum ImmunityEnum {
  IMMUNE_KANNIC {

    @Override    
    public SchoolEnum getSchool() {
      return SchoolEnum.KANNIC;
    }
  };

  public abstract SchoolEnum getSchool();
}
于 2013-05-30T12:34:41.757 に答える