我尝试创建一个带有一些通用参数的抽象类,这样我就可以从这个类继承并创建几个类似的参数。但我正在努力使用 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>);
}
}
有谁知道如何使它工作?