[英]java reflection nested object set private field
我正在嘗試使用反射設置一個私有的嵌套字段(本質上是Bar.name),但是我遇到了一個我不知道的異常。
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) throws Exception {
Foo foo = new Foo();
Field f = foo.getClass().getDeclaredField("bar");
Field f2 = f.getType().getDeclaredField("name");
f2.setAccessible(true);
f2.set(f, "hello world"); // <-- error here!! what should the first parameter be?
}
public static class Foo {
private Bar bar;
}
public class Bar {
private String name = "test"; // <-- trying to change this value via reflection
}
}
我得到的例外是:
Exception in thread "main" java.lang.IllegalArgumentException: Can not set java.lang.String field com.lmco.f35.decoder.Test$Bar.name to java.lang.reflect.Field
f2.set(f, "hello world");
問題是f
是一個Field
而不是Bar
。
您需要從foo
開始,提取foo.bar
的值 ,然后使用該對象引用。 例如這樣的東西
Foo foo = new Foo();
Field f = foo.getClass().getDeclaredField("bar");
f.setAccessible(true);
Bar bar = (Bar) f.get(foo);
// or 'Object bar = f.get(foo);'
Field f2 = f.getType().getDeclaredField("name");
f2.setAccessible(true);
f2.set(bar, "hello world");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.