其他分享
首页 > 其他分享> > 如何访问匿名对象内部声明的字段而不进行反射?

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

作者:互联网

可以使匿名类在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

标签:java,types,inner-classes,anonymous-class
来源: https://codeday.me/bug/20190612/1229192.html