gpt4 book ai didi

java - 是否可以有一个包含对象构造函数的枚举?

转载 作者:行者123 更新时间:2023-12-04 06:20:42 28 4
gpt4 key购买 nike

我正在测试一种不同的模式。我已经让代码在 switch 中工作了声明,但我想尝试一些更不拘一格的东西......用于研究目的。

假设我有 4 个类(class),Class1 , Class2 , Class3 , 和 Class4所有扩展 BaseClass .我想把它们放入 enum ,像这样:

enum ClassFactories { 
Class1(Class1.class),
Class2(Class2.class),
Class3(Class3.class),
Class4(Class4.class);

private final Class factory;
ClassFactories(Class factory) {
this.factory = factory;
}

public BaseClass generate() {
BaseClass b = null;
try {
b = (BaseClass)this.factory.newInstance();
} catch (Exception e) {
// handle any exceptions
}
return f;
}
}

在传递 int 的工厂方法中,我希望能够做这样的事情:
public void fakeMethod(int type) {
BaseClass someClass = ClassFactories.values()[type].generate();
someClass.doStuff();
}

有没有更清洁/更简单的方法来做到这一点?我不太关心可读性(现在),我只是好奇这是否可能。

最佳答案

是的,这是可能的。类似于“模板方法”的方法。所以例如

public enum ClassFactory {
Class1() {
@Override public void generate() {
System.out.println("I'm in Class 1.");
}
},
Class2() {
@Override public void generate() {
System.out.println("I'm in Class 2.");
}
};
//template method
public abstract void generate();

private static final Map<Integer, ClassFactory > lookup
= new HashMap<Integer, ClassFactory >();

static {
for (ClassFactory s : EnumSet.allOf(ClassFactory.class))
lookup.put(s.getIntValue(), s);
}

public static ClassFactory getValue(int intValue) {
return lookup.get(intValue);
}

}

调用代码

使用静态导入,调用此枚举的客户端代码将如下所示:
Class1.generate();
Class2.generate();
//or better...
getClass().generate();

或者
public void fakeMethod(int type) {
ClassFactory.getValue(type).generate();
}

关于java - 是否可以有一个包含对象构造函数的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com