2012-03-02 31 views
7

Cho phép giả định rằng một số lớp không thể truy cập được, nhưng có một lớp khác là ẩn danh do lớp học tạo ra. Người đầu tiên có thể bị loại bỏ bởi Garbage Collector?Các lớp ẩn danh Java và Bộ gom rác

Ví dụ:


class Outer { 
    public Object getInner() { 
    return new Object() {}; 
    } 
} 

... 

Outer outer = new Outer(); 
Object inner = outer.getInner(); 

// Could the "outer" instance be removed here considering that "inner" is using below? 
+0

Trong mã của bạn, bạn đang gọi một phương thức từ lớp 'Outer'. Điều gì có thể không thể truy cập được ở đó? – Marcelo

Trả lời

8

Không, trường hợp bên ngoài là vẫn có thể truy cập trong trường hợp này, vì mỗi lớp bên trong không tĩnh có rerefence ngầm để dụ lớp bên ngoài của nó.

+0

Sự khác biệt là lớp ẩn danh trong ví dụ của tôi không sử dụng tham chiếu của nó cho lớp bên ngoài một cách rõ ràng (không phải nội bộ lẫn bên ngoài). Vì vậy, tôi nghĩ rằng thực sự bên ngoài lớp học là không thể truy cập. –

+4

Nó vẫn có tham chiếu. Và JVM không thể biết rằng tham chiếu này sẽ không bao giờ được sử dụng. Nếu bạn không bao giờ sử dụng tham chiếu ngoài này, lớp phải là một lớp bên trong tĩnh hoặc một lớp cấp cao nhất. –

+0

Bây giờ nó trở nên rõ ràng. Cảm ơn bạn! –

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