Java 枚举常量特定初始化
现在,我们都知道enum是一种很好的多实例方法(例如,一个在编译时拥有固定数量实例的类),因为每个常量几乎都是自己enum类的一个子类。但是,我遇到了一个问题,即如何使枚举常量特定于初始化 假设我们有以下枚举:Java 枚举常量特定初始化,java,constructor,enums,initialization,multiton,Java,Constructor,Enums,Initialization,Multiton,现在,我们都知道enum是一种很好的多实例方法(例如,一个在编译时拥有固定数量实例的类),因为每个常量几乎都是自己enum类的一个子类。但是,我遇到了一个问题,即如何使枚举常量特定于初始化 假设我们有以下枚举: public enum InputMethod { FOO { private final FooFactory factory; public Document createDocument(String inputString) {
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。由于静态初始化相对于枚举常量本身的初始化的顺序,使用静态初始化似乎不起作用。最后,我不能显式声明构造函数,因为InputMethod
的子类FOO
是的一个实例,只是碰巧是匿名的
因此,除了让自己接受惰性初始化,我如何正确初始化InputMethod.FOO
中的FooFactory
实例?“我不能将其放入枚举类型的构造函数中,因为InputMethod.BAR不使用FooFactory”=>您可以传递一个空工厂。但是,由enum负责创建工厂听起来并不正确。
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);
}