Java 允许您在匿名类中声明新字段,但我不知道如何从外部访问它们,甚至将它们设置为 public 也不让我这样做。
class A {
public static void main(String[] args) {
Object o = new Object() {
public int x = 0;
{
System.out.println("x: " + x++);
System.out.println("x: " + x++);
}
};
System.out.println(o.x);
}
}
我收到这个编译器错误:
$ javac A.java && java A
A.java:10: cannot find symbol
symbol : variable x
location: class java.lang.Object
System.out.println(o.x);
^
1 error
Why?
Why?
这是因为Object
是变量的静态类型o
, and Object
没有财产x
。由于完全相同的原因,以下内容无法编译:
public class X {
public int x;
public static void main(String[] args) {
Object o = new X();
o.x = 3;
}
}
希望您对这个示例的 Java 直觉是正确的expect这会失败。因此,只需将这种直觉移植到您的示例中即可。
如何访问匿名对象中声明的字段?
与您访问的方式相同x
在我的例子中:反思。
Object o = new X();
o.getClass().getField("x").setInt(o, 3);
如果我不能使用它们,为什么它允许我创建公共字段?
如果它不允许你创建公共字段,那么即使反射对你也不起作用,至少不像上面那么简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)