2012-02-06 113 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中的“初始化实例成员”。