2012-02-06 7 views
7

){それはそれが意味する前の何の識別子や宣言を持っていない:このコードブロックは何を意味しますか?匿名クラスの新しいRunnableを(ラン下の2番目のブロックを()何

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

       final Runnable val$runnable; 

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


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

は編集:はい、それはコードを逆コンパイルされます。

答えて

14

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

(このコードは、実際には完全でないか、有効ではないようですが、インスタンス初期化子にrunnable1が表示されていますが、インスタンス初期化子にはsuper()コールが含まれているとは思われません。おそらく逆コンパイルされたコード?)

+0

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

+0

はい。デコンパイルされたコードです。 – rsman

2

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

tutorialの「インスタンスメンバーの初期化」を参照してください。

関連する問題