もちろん、次の方法があります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
}