使用方法创建枚举值

And*_*ham 1 java enums

我有一个枚举: public enum X implements Y

我也有一个类 Ybuilder可以创建实例Y,比方说Ybuilder.create(int value)

如何将枚举中的枚举值设置为Y创建的实例Ybuilder?理想情况下,这将是一个简单的事情

public enum X implements Y {
  A (Ybuilder.create(0)),
  B (Ybuilder.create(1)),
};
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 6

我不认为你可以这样做 - 一种替代方法是委托给构建器创建的Y实例.例如:

interface Y { //Assume Y has two methods
   void m1();
   void m2();
}

public enum X implements Y {
  A (0),
  B (1);
  private final Y y;
  X(int value) { this.y = YBuilder.create(value); }

  //Then delegate to y to implement the Y interface

  public void m1() { y.m1(); return; }
  public void m2() { y.m2(); return; }
};
Run Code Online (Sandbox Code Playgroud)

请注意,我使用int参数创建了枚举,但Y如果您愿意,可以直接传递:

public enum X implements Y {
  A (Ybuilder.create(0)),
  B (Ybuilder.create(1));
  private final Y y;
  X(Y y) { this.y = y; }
};
Run Code Online (Sandbox Code Playgroud)

  • @AndrewLatham看起来很像枚举不一定适合这个用例; 你实际上只是想要一堆常量. (4认同)