2

我有两个相互交叉引用的枚举。每个都有一个构造函数,该构造函数具有其他枚举的参数。

它们看起来像:

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

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

但是,根据我首先调用的 Enum,我可以获得引用变量的空值。

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

关于枚举何时实例化,这似乎有点“鸡和蛋”的问题。但是有没有办法让每个人都正确地引用另一个人?我正在考虑制作两个人工交叉引用两者的单例哈希图,但有更好的主意吗?

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 回答