如何访问匿名对象内部声明的字段而不进行反射?

可以使匿名类在Java中有新字段:

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);
   }
}

但是在这个例子中无法访问它们,因为o是Object类型:

$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

请注意,o实际上不是Object,它是扩展Object的不同类的实例.这个类有一个公共字段x.这个班有名字吗?如何使o成为正确的类型,以便我可以访问o.x? (注意it’s possible to do this with reflection,但我想静态地做).

最佳答案
像这样

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(((A$1)o).x);
   }
}

编译一次

$java A.java

取消注释打印线

重新编译&跑

$java A.java && java A
x: 0
x: 1
2

转载注明原文:如何访问匿名对象内部声明的字段而不进行反射? - 代码日志