もちろん、次の方法がありますOuterClass.this
。しかし、それは非常に不器用です。outer
のようなキーワードがあれば理想的super
です。
反射的にそれを行う方法はありますか?(私は方法を見つけていません。非表示のouter
参照は の結果に表示されないようですClass#getFields()
。)
多分Java7に方法がありますか?
編集。私が見つけたこの同様の質問を考えてみましょう:
もちろん、次の方法がありますOuterClass.this
。しかし、それは非常に不器用です。outer
のようなキーワードがあれば理想的super
です。
反射的にそれを行う方法はありますか?(私は方法を見つけていません。非表示のouter
参照は の結果に表示されないようですClass#getFields()
。)
多分Java7に方法がありますか?
編集。私が見つけたこの同様の質問を考えてみましょう:
唯一の方法はOuterClass.this
、含まれているクラスを参照するために使用することです。
これは問題ではありません。含まれているクラス インスタンスを複数回参照する必要がある場合は、それをローカル変数に割り当てるだけで、この構文を複数回処理する必要はありません。final OuterClass oc = OuterClass.this;
次に、oc
必要なことをローカルで使用するだけです。
のような別のキーワードをouter
使用すると、何が起こっているのかわかりにくくなります。構文は何が起こっているかをOuterClass.this
明示的に定義します。一般的なキーワードは、特に複数の内部クラスにネストされている場合、含まれているクラスの ID を隠します。outer.this.outer.this.outer.this
恐ろしいです!
これは、いくら想像しても重荷ではありません。特に最新の IDE では。
Object innerClassInstance = null; //get an inner class instance from somewhere.
Object outerClassInstance = null;
Field[] fields = innerClassInstance.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
Object value = field.get(innerClassInstance);
if ("this$0".equals(name) && value != null) {
outerClassInstance = value;
break;
}
}
if (outerClassInstance != null) {
// now do something with your outer class instance
}