繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM