如何在Java中从枚举中返回一个对象?

Sid*_*rth 3 java enums object

我有许多实现相同接口的类.所有这些类的对象必须在主类中实例化.我试图以一种优雅的方式完成这件事(我想通过枚举).示例代码: -

public interface Intr {
//some methods
}

public class C1 implements Intr {
// some implementations
}

public class C2 implements Intr {
// some implementations
}

...

public class Ck implements Intr {
// some implementations
}


public class MainClass {

enum ModulesEnum {
//Some code here to return objects of C1 to Ck
 FIRST {return new C1()},
 SECOND {return new C2()},
 ...
 KTH  {return new Ck()};
}

}
Run Code Online (Sandbox Code Playgroud)

现在在上面的例子中,我可以通过一些优雅的方式获得C1类到Ck类的新对象的实例.或者也可以理解任何其他更好的机制而不是枚举.

Sil*_*cea 7

enum ModulesEnum {

  FIRST(new C1()), SECOND(new C2()); // and so on

  private ModulesEnum(Intr intr) { this.obj = intr; }
  private Intr obj;

  public Intr getObj() { return obj; }

}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.诀窍是为每个枚举添加一个实现.如果要访问该对象,请使用getter.

ModulesEnum.FIRST.getObj();
Run Code Online (Sandbox Code Playgroud)

如果您Intr和它的实现是package protected,您可以ModulesEnum公开来公开实现.这样,每个实现只能有一个实例,使它们singleton不显式使用模式.

Factory如果您打算为每个实现创建多个实例,您当然也可以使用它.