如何访问匿名对象内部声明的字段而不进行反射?
作者:互联网
可以使匿名类在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