2012-02-06 20 views
7

Lo que hace el segundo bloque de abajo run() de la clase anónima nueva Ejecutable() {que no tiene identificador o declaración anterior significa:¿Qué significa este bloque de código?

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

       final Runnable val$runnable; 

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


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

Editar: Código de sí que se descompila.

Respuesta

14

Es un instance initializer - llamado como parte del constructor. En una clase interna anónima, no se puede declarar explícitamente un constructor, por lo que a veces se usan inicializadores de instancias. En este caso, es bastante inútil, ya que el método run podría simplemente usar runnable directamente - aún se capturaría al mismo tiempo.

(Este código no parece completo o válido, en realidad, dado que el inicializador de instancia menciona runnable1 que no aparece en ningún otro lugar. Tampoco esperaba que el inicializador de instancia incluyera una llamada super(). este código posiblemente descompilado?)

+0

Por lo que sé, no puede tener una llamada 'super()' en un inicializador de instancia, por lo que el código como se muestra arriba no se compila. Ciertamente se parece a un código descompilado. – Jesper

+0

Sí. Es un código descompilado. – rsman

2

Es un bloque de inicialización. Se compila en cada constructor.

Consulte "Inicializar miembros de instancia" en el tutorial.

Cuestiones relacionadas