このコードブロックは何を意味しますか?

匿名クラスのrunnable(){の前に識別子または宣言がないrun()の下の2番目のブロックは、何を意味しますか?

        public BackgroundThread(final Runnable runnable)
        {
            super(new Runnable() {

                final Runnable val$runnable;

                public void run()
                {
                    Process.setThreadPriority(10);
                    runnable.run();
                }


                {
                    runnable = runnable1;
                    super();
                }
            });
        }

編集:はいそれは逆コンパイルされたコードです。

7

2 答え

インスタンス初期設定 - コンストラクタの一部として呼び出されます。匿名の内部クラスでは、コンストラクタを明示的に宣言することができないため、代わりにインスタンスイニシャライザが使用されることがあります。この場合、 run メソッドは runnable を直接使用するだけで、同時にキャプチャされるため、無意味です。

(このコードは完全で有効なものではありませんが、実際にはインスタンスの初期化子が他の場所には表示されない runnable1 を記述しています。 code> super()コール。これはおそらく逆コンパイルされたコードですか?

14
追加された
私が知る限り、インスタンスの初期化子で super()呼び出しを行うことはできませんので、上記のコードはコンパイルされません。確かに逆コンパイルされたコードのように見えます。
追加された 著者 Jesper,
はい。デコンパイルされたコードです。
追加された 著者 Raj,

これは初期化ブロックです。すべてのコンストラクタにコンパイルされます。

チュートリアルの「インスタンス・メンバーの初期化」を参照してください。

2
追加された