0
我有一个枚举匿名内部类,如:的Java枚举匿名内部类和反射
public enum Status {
PRELIMINARY() {
@Override
boolean process() {
return true;
}
SUBMITTED() {
@Override
boolean process() {
return false;
}
abstract boolean process();
}
我有一个像
public class Foo {
private Status status;
public void setStatus(Status status) {
this.status = status;
}
}
我需要使用反射来设置Foo.status
就像一个模型:
private static <T> void setFieldValue(Foo instance, Class<?> klazz, Object value) {
try {
Class<?> aClass = value.getClass(); // Is Status$1 instead of Status
Method method = klazz.getDeclaredMethod(getSetterName('setStatus'), aClass);
method.invoke(instance, value);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
if (!klazz.equals(Object.class)) {
setFieldValue(instance, klazz.getSuperclass(), fieldName, value);
}
}
}
这适用于Status
不包含内部类并且是一个简单枚举,但是对于上面的Status
类,它会抛出一个NoSuchMethodException
。这是因为我的价值等级是package.Status$1
而不是package.Status
。
有没有很好的解决这个问题?
不要太挑剔,但您的示例代码缺少一些括号,您的反射示例看起来完全不相关,因为没有可能对应于调用的方法。 – Dave
感谢戴夫,我已更新我的代码以更好地反映我的问题。 – pez
[This answer](https://stackoverflow.com/a/45590933/2891664)可能会帮助你。但是,我会质疑为什么你在这里使用反射,因为你似乎对你提前调用的方法非常了解。 – Radiodef