现在,我们都知道枚举是执行多实例(即具有固定数量实例的类,在编译时已知)的好方法,因为每个常量几乎都是您自己的单例子类枚举类。但是,我遇到了如何对枚举常量进行特定初始化的问题。
假设我们有以下枚举:
public enum InputMethod {
FOO {
private final FooFactory factory;
public Document createDocument(String inputString) {
return factory.createFooParser().parse(inputString);
}
},
BAR {
public Document createDocument(String inputString) {
BarBuilder builder = new BarBuilder();
builder.setInput(inputString);
return input.build();
}
};
public abstract Document createDocument(String inputString);
}
我想要做的是初始化InputMethod.FOO
中的FooFactory
实例。为此,我必须调用 FooFactory.newInstance()
。但是,这可能会引发异常,因此我不能直接直接说 factory = FooFactory.newInstance()
。我无法将其放入枚举类型的构造函数中,因为 InputMethod.BAR
不以任何方式使用 FooFactory。由于静态初始化相对于枚举常量本身的初始化的完成顺序,使用静态初始化似乎不起作用。最后,我无法显式声明构造函数,因为 FOO
的实例 InputMethod
的子类恰好是匿名的。
那么,除了让自己屈服于延迟初始化之外,我如何正确初始化 InputMethod.FOO
中的 FooFactory
实例?
最佳答案
public enum InputMethod {
FOO {
private final FooFactory factory;
{
try {
factory = Factory.newInstance();
} catch (...) {
...
}
}
public Document createDocument(String inputString) {
return factory.createFooParser().parse(inputString);
}
},
BAR { ... };
public abstract Document createDocument(String inputString);
}
关于java - 枚举常量特定初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757643/