2012-02-06 107 views
7

什麼下面運行的第二塊()的匿名類新的Runnable(){不具有標識符或聲明前述意思:這段代碼是什麼意思?

 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 2012-02-06 12:18:20

+0

是的。它是反編譯的代碼。 – rsman 2012-02-06 12:20:22

2

這是一個初始化塊。它被編譯到每個構造函數中。

請參閱tutorial中的「初始化實例成員」。