0
私のような匿名の内部クラスと列挙型を持っている:のJavaのenum匿名内部クラスと反射
public enum Status {
PRELIMINARY() {
@Override
boolean process() {
return true;
}
SUBMITTED() {
@Override
boolean process() {
return false;
}
abstract boolean process();
}
私は同じようFoo.status
を設定するためにリフレクションを使用する必要が
public class Foo {
private Status status;
public void setStatus(Status status) {
this.status = 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
に内部クラスがなく、単純なenumですが、上記のStatus
クラスの場合はNoSuchMethodException
を投げます。これは、私のクラスのクラスがpackage.Status
の代わりにpackage.Status$1
になるためです。
これには適切な回避策がありますか?
あなたのサンプルコードには角括弧がないので、呼び出しに対応できるメソッドがないため、リフレクションの例は完全に無関係です。 – Dave
Daveさん、ありがとうございました。私の問題をよりよく反映するようにコードを更新しました。 – pez
[この回答](https://stackoverflow.com/a/45590933/2891664)が役に立ちます。しかし、私はなぜ正確にあなたがここで反射を使用しているのか疑問に思っています。あなたが事前に呼び出しているメソッドについて非常に多くを知っているようだからです。 – Radiodef