1

もちろん、次の方法がありますOuterClass.this。しかし、それは非常に不器用です。outerのようなキーワードがあれば理想的superです。

反射的にそれを行う方法はありますか?(私は方法を見つけていません。非表示のouter参照は の結果に表示されないようですClass#getFields()。)

多分Java7に方法がありますか?

編集。私が見つけたこの同様の質問を考えてみましょう:

さらに匿名の内部クラスから匿名の内部クラスへの参照を取得する構文はありますか?

4

2 に答える 2

9

唯一の方法はOuterClass.this、含まれているクラスを参照するために使用することです。

これは問題ではありません。含まれているクラス インスタンスを複数回参照する必要がある場合は、それをローカル変数に割り当てるだけで、この構文を複数回処理する必要はありません。final OuterClass oc = OuterClass.this;次に、oc必要なことをローカルで使用するだけです。

のような別のキーワードをouter使用すると、何が起こっているのかわかりにくくなります。構文は何が起こっているかをOuterClass.this 明示的に定義します。一般的なキーワードは、特に複数の内部クラスにネストされている場合、含まれているクラスの ID を隠します。outer.this.outer.this.outer.this恐ろしいです!

これは、いくら想像しても重荷ではありません。特に最新の IDE では。

于 2012-07-01T18:33:46.197 に答える
-1

あなたが望んでいたことを正確に行うこのコードを試してください:

                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
                }

于 2014-08-22T20:43:24.837 に答える