如何访问匿名对象中声明的字段?

2024-01-23

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(使用前将#替换为@)

如何访问匿名对象中声明的字段? 的相关文章

随机推荐