Enum中没有枚举const类

时间:2012-06-29 19:53:27

标签: java enums

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");

它抛出异常。有什么想法吗?

2 个答案:

答案 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”的枚举值。您只有ABvalueOf不会使用您在product中存储的内容。如果您想通过某些自定义标识符获取枚举,则必须使用一些将product转换为ProcessorFactory值的翻译地图(或者只是覆盖所有值,效率较低)。< / p>