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

上記の例外がスローされます。何か案は?

4

2 に答える 2

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
}
于 2012-06-29T19:57:35.720 に答える
3

「ap」という名前の列挙値は実際にはありません。と しかありませABvalueOfに保存したものは使用しませんproduct。いくつかのカスタム識別子で列挙型を取得したい場合は、値に変換する変換マップを使用する必要がありproductますProcessorFactory(または、効率が悪いすべての値を調べるだけです)。

于 2012-06-29T19:58:26.723 に答える