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
。このクラスには public フィールドが 1 つありますx
。このクラスに名前はありますか?にアクセスできるようにするにはどうすればo
適切なタイプにすることができますo.x
か? (リフレクションでこれを行うことは可能ですが、静的に行いたいことに注意してください)。