我想设定一些枚举的默认值,我使用下面的方法设置的枚举值:提取,并通过反射
private void checkEnum(Field field, String setMethod) {
// TODO Auto-generated method stub
try {
String className = Character.toUpperCase(field.getName().charAt(0)) +
field.getName().substring(1);
Class<?> cls = Class.forName("com.citigroup.get.zcc.intf." + className);
Object[] enumArray = cls.getEnumConstants();
//set to the last Enum which is unknown
invoke(setMethod, enumArray[enumArray.length - 1]);
} catch(Exception e) {
System.out.println(e.toString());
}
}
的问题实际上是设置枚举。我已经提取了枚举类型,但是然后调用MethodInvoker。传入Enum对象证明是一个问题。所有枚举都具有以下内容作为枚举数组的最后一个元素。
private Object invoke(String methodName, Object newValue) {
Object value = null;
try {
methodInvoker.setTargetMethod(methodName);
if (newValue != null) {
methodInvoker.setArguments(new Object[]{newValue});
} else {
methodInvoker.setArguments(new Object[]{});
}
methodInvoker.prepare();
value = methodInvoker.invoke();
} catch (ClassNotFoundException e) {
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
} catch (NoSuchMethodException e) {
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
} catch (java.lang.reflect.InvocationTargetException e) {
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
} catch (IllegalAccessException e) {
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
}
return value;
}
所以我迷路了,为什么
invoke(setMethod, enumArray[enumArray.length -1]);
是不是我的设置枚举
:EnumName.UNKNOWN
然而,这不被通过,它看起来像invoke方法设置
你看到一个异常? 'invoke'中'newValue'的值是'null',还是你的枚举之一? –
你的代码有点复杂。你的'invoke'方法没有一个可以设置枚举的对象实例。你只是传递一个方法名和一个枚举值...你真的没有机会在构造函数中做这件事吗? – Kai