public enum ProcessorFactory {
A("ap") {
Processor create() throws Exception {
return new AProcessor();
}
},
B("bp"){
Processor create() throws Exception {
return new BProcessor();
}
};
abstract Processor create() throws Exception;
public static Processor getProcessor(String product) throws Exception {
ProcessorFactory factory = valueOf(product);
return factory.create();
}
private String product;
private ProcessorFactory(String product) {
this.product = product;
}
}
现在我试着打电话
ProcessorFactory.getProcessor("ap");
它抛出异常。有什么想法吗?
答案 0 :(得分:4)
尝试ProcessorFactory.getProcessor("A")
或添加新方法:
public ProcessorFactory getbyProduct(String product) {
for (ProcessorFactory factory : values()) {
if (factory.getProduct().equals(processor)) {
return factory;
}
}
return null; // or throw an exception
}
答案 1 :(得分:3)
嗯,确实没有名为“ap”的枚举值。您只有A
和B
。 valueOf
不会使用您在product
中存储的内容。如果您想通过某些自定义标识符获取枚举,则必须使用一些将product
转换为ProcessorFactory
值的翻译地图(或者只是覆盖所有值,效率较低)。< / p>