【发布时间】:2011-07-07 16:00:45
【问题描述】:
我正在测试一种不同的模式。我已经在switch 语句中编写了代码,但我想尝试一些更不拘一格的东西……出于研究目的。
假设我有 4 个类,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();
}
有没有更清洁/更简单的方法来做到这一点?我不太关心可读性(现在),我只是好奇这是否可能。
【问题讨论】:
-
为什么你要添加枚举但仍然传递一个int?为什么不
fakeMethod(ClassFactories cf)? -
这是个好问题。将它作为枚举传递似乎更有意义。
标签: java enums constructor