2012-02-06 19 views
7

Che cosa significa il secondo blocco di sotto run() nella classe anonima nuova Runnable() {che non ha identificatore o dichiarazione precedente significa:Cosa significa questo blocco di codice?

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

       final Runnable val$runnable; 

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


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

Edit: codice sì è decompilato.

risposta

14

È un instance initializer - chiamato come parte del costruttore. In una classe interna anonima, non è possibile dichiarare esplicitamente un costruttore, quindi a volte vengono utilizzati gli inizializzatori di istanza. In questo caso è piuttosto inutile, poiché il metodo run può semplicemente utilizzare runnable direttamente - sarebbe comunque catturato allo stesso tempo.

(Questo codice non sembra che sia completa o valida, in realtà -. Visto che l'inizializzatore esempio cita runnable1 che non appare altrove mi piacerebbe anche non aspettatevi l'inizializzatore esempio per includere una chiamata super() è. questo codice eventualmente decompilato?)

+0

Per quanto ne so non è possibile avere una chiamata 'super()' in un inizializzatore di istanza, quindi il codice come mostrato sopra non viene compilato. Sembra certamente un codice decompilato. – Jesper

+0

Sì. È decompilato codice. – rsman

2

È un blocco di inizializzazione. Viene compilato in ogni costruttore.

Vedere "Inizializzazione dei membri di istanza" in tutorial.

Problemi correlati