0

我尝试创建一个带有一些通用参数的抽象类,这样我就可以从这个类继承并创建几个类似的参数。但我正在努力使用 Enum 类型的 Jcommander。以下代码给了我错误。我想知道是否没有为枚举类型指定转换器,是否调用了 EnumConverter?

public abstract class GeneralParameters<T extends Enum<T>> extends Parameters {
    @Parameter(names = {"--operation"}, description =
        "the operation to perform", required = true)
    public T mOperation;
}
com.beust.jcommander.ParameterException: Could not invoke null
    Reason: Can not set java.lang.Enum field alluxio.stress.GeneralParameters.mOperation to java.lang.String
    at com.beust.jcommander.Parameterized.set(Parameterized.java:273)
    at com.beust.jcommander.WrappedParameter.addValue(WrappedParameter.java:86)
    at com.beust.jcommander.WrappedParameter.addValue(WrappedParameter.java:74)
    at com.beust.jcommander.ParameterDescription.addValue(ParameterDescription.java:277)
    at com.beust.jcommander.JCommander.processFixedArity(JCommander.java:913)
    at com.beust.jcommander.JCommander.processFixedArity(JCommander.java:894)
    at com.beust.jcommander.JCommander.parseValues(JCommander.java:724)
    at com.beust.jcommander.JCommander.parse(JCommander.java:356)
    at com.beust.jcommander.JCommander.parse(JCommander.java:335)

我在网上搜索并尝试添加转换器,但不知道该怎么做。(需要一个通用 fromString 方法的 Enum 接口)

public abstract class GeneralParameters<T extends Operation> extends Parameters {
    @Parameter(names = {"--operation"}, description =
        "the operation to perform for the stress bench", converter = OperationConverter.class, required = true)
    public T mOperation;

    public static class OperationConverter<S extends Operation> implements IStringConverter<S> {
        private final Class<S> clazz;

        protected OperationConverter(Class<S> clazz) {
            this.clazz = clazz;
        }

        @Override
        public S convert(String value) {

            return S.fromString(value, Class<T>);
        }
    }

有谁知道如何使它工作?

4

0 回答 0