现在,我们都知道枚举是处理多实例的好方法(即,具有固定数量实例的类,在编译时已知),因为每个常量几乎都是您自己的枚举类的单例子类。但是,我遇到了如何进行枚举常量特定初始化的问题。
假设我们有以下枚举:
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);
}
我想要做的是FooFactory
在InputMethod.FOO
. 为了做到这一点,我必须打电话给,说,FooFactory.newInstance()
。但是,这可能会抛出异常,所以我不能简单地factory = FooFactory.newInstance()
直接说。我不能把它放在枚举类型的构造函数中,因为InputMethod.BAR
它没有以任何方式使用 FooFactory。由于静态初始化相对于枚举常量本身的初始化的顺序,使用静态初始化似乎不起作用。最后,我不能显式声明一个构造函数,因为它的子类InputMethod
是FOO
一个恰好是匿名的实例。
那么,除了让自己接受惰性初始化之外,我将如何正确初始化FooFactory
实例InputMethod.FOO
?