2012-06-15 29 views
8

Tôi đã đọc rằng trong giao diện Java không thể được khởi tạo (in the documentation, Interfaces). Runnable, theo định nghĩa là một giao diện nên được thực hiện bởi một số lớp. Nhưng trong đoạn mã sau đây từ một trong các ứng dụng Android của tôi, tôi thấy rằng một hàm tạo rỗng - Runnable() ... (Tôi không chắc chắn nếu nó là một hàm tạo) đã được sử dụng, và một cá thể đã được tạo ra - getStatus.Android và Java: sử dụng runnable

final Runnable getStatus = new Runnable() 
{ 
    public void run() 
    { 
     TextView uat = (TextView) findViewById(R.id.useAndThrow); 
     uat.setText(MyThread.getStatus()); 
     return; 
    } 
}; 

Những gì tôi đã đến để nhận biết:

  1. Đây có lẽ là một ví dụ về lớp nặc danh.
  2. Cá thể không thực sự là giao diện.

Nhưng tôi không thể kết nối các dấu chấm. Giả sử rằng mã ở trên nằm trong lớp myActivity, những gì đang được khởi tạo và lớp ẩn danh này như thế nào?

Một chút chi tiết sẽ tuyệt vời.

Trả lời

7

Nó được gọi là "lớp ẩn danh". Một số lưu ý về nó:

  1. Bạn chưa cung cấp tên, vì vậy, một tên được tạo cho bạn. Để xem tên thật của nó là gì, chỉ cần viết nó vào bàn điều khiển hoặc đọc bytecode.

  2. Lớp ẩn danh, nếu được tạo trong phạm vi lớp bên ngoài, có tham chiếu đến các trường của nó, giống như bất kỳ lớp bên trong nào. Nói chung, nó có cùng phạm vi nơi nó được tạo ra.

  3. Một điều rất phổ biến cần làm nếu tất cả những gì bạn cần là triển khai đơn giản. Càng có nhiều mã, bạn càng cân nhắc đặt nó vào một tệp khác (cho thứ tự, không phải vì bạn không thể).

  4. Runnable không phải là giao diện duy nhất phổ biến. Trên Android, bạn sử dụng OnClickListener, OnTouchListener, ...

  5. Vì lớp ẩn danh có cùng phạm vi với nơi nó được khai báo, điều đó có nghĩa là nó có tham chiếu. Cố gắng không bao giờ giữ một lớp ẩn danh quá lâu (ví dụ, trong một tham chiếu tĩnh), vì điều này có thể dẫn đến rò rỉ bộ nhớ. Trên Android, điều này rất quan trọng, vì chương trình sample này (nói về các bản vẽ, nhưng một lớp ẩn danh cũng có thể có tham chiếu đến ngữ cảnh).

  6. Một số điểm bất lợi của các lớp ẩn danh là chúng không có hàm tạo và không thể triển khai nhiều giao diện.Nó có một cách sử dụng rất hẹp, nhưng nó rất phổ biến vì nó rất dễ sử dụng (và đọc).

1

Điều gì đang được khởi tạo là một lớp con ẩn danh của Runnable. Nó được gọi là vô danh vì chính nó không có tên. Trong lớp con này, bạn đang triển khai phương thức run() được chỉ định trong giao diện Runnable.

Loại getStatusRunnable, tuy nhiên đối tượng đang được tham chiếu bởi getStatus thực sự là triển khai Runnable không có loại được đặt tên rõ ràng.

0

Mã đang tạo một phiên bản của lớp triển khai giao diện Runnable. Lớp học không có tên.

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