2012-02-06 48 views
7

gì khối thứ hai bên dưới run() trong lớp ẩn danh mới Runnable() {mà không có định danh hoặc tuyên bố trước đó nó có nghĩa là:Khối mã này có nghĩa là gì?

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

       final Runnable val$runnable; 

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


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

Chỉnh sửa: Mã có nó được dịch ngược.

Trả lời

14

Đây là một số instance initializer - được gọi là một phần của hàm tạo. Trong một lớp bên trong vô danh, bạn không thể khai báo một cách rõ ràng một hàm tạo, do đó, các trình khởi tạo thể hiện đôi khi được sử dụng thay thế. Trong trường hợp này nó là vô nghĩa, vì phương pháp run chỉ có thể sử dụng trực tiếp runnable - nó sẽ vẫn được chụp cùng một lúc.

(Mã này có vẻ không hoàn chỉnh hoặc hợp lệ, thực tế - được cho là trình khởi tạo thể hiện đề cập đến runnable1 không xuất hiện ở bất kỳ nơi nào khác. Tôi cũng không mong đợi trình khởi chạy thể hiện bao gồm cuộc gọi super(). mã này có thể bị giải mã?)

+0

Theo tôi biết bạn không thể có một cuộc gọi 'super()' trong một trình khởi tạo thể hiện, do đó, mã như được hiển thị ở trên không biên dịch. Nó chắc chắn trông giống như mã được giải mã. – Jesper

+0

Có. Đó là mã được giải mã. – rsman

2

Đó là khối khởi tạo. Nó được biên dịch vào mọi constructor.

Xem "Khởi tạo thành viên sơ thẩm" trong tutorial.

Các vấn đề liên quan