[英]How to return an object from enum in Java?
我有许多实现相同接口的类。 所有这些类的对象必须在主类中实例化。 我试图以一种优雅的方式完成这件事(我想通过枚举)。 示例代码: -
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()};
}
}
现在在上面的例子中,我可以通过一些优雅的方式获得C1类到Ck类的新对象的实例。 或者也可以理解任何其他更好的机制而不是枚举。
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; }
}
希望有所帮助。 诀窍是为每个枚举添加一个实现。 如果要访问该对象,请使用getter。
ModulesEnum.FIRST.getObj();
如果您的Intr
及其实现受package protected
,您可以将ModulesEnum
公开以公开实现。 这样,每个实现只能有一个实例,使它们成为singleton
而不显式使用模式。
如果您打算为每个实现创建多个实例,您当然也可以使用Factory
。
你需要的是工厂模式。 是否需要将Enum类用作工厂本身是另一个问题。 你可以这样做:
public enum Module {
FIRST, SECOND, ..., KTH
}
public class ModuleFactory {
public Intr createModule(Module module) {
switch (module) {
case FIRST:
return new C1();
case SECOND:
return new C2();
...
case KTH:
return new Ck();
...
}
}
}
如果不知道你打算如何使用这些对象,我真的不能说哪种方法更合适。
使用静态工厂。
public IntrFactory {
static Intr first() {
return new C1();
}
static Intr second() {
return new C2();
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.