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