2012-04-09 5 views
19

thể trùng lặp:
Is there a simple way of obtaining all object instances of a specific class in JavaBắt tất cả các trường của một lớp

Trong java, có cách nào có thể nhận được tất cả các trường hợp của một lớp nào đó?

+0

từ bạn sẽ được instantiating chúng, chỉ cần giữ một (yếu? java có yếu tài liệu tham khảo?) Tham chiếu đến từng trường hợp. Nhưng tôi sẽ nghi ngờ bất kỳ thiết kế yêu cầu này ... –

Trả lời

19

Bạn có thể sử dụng một máy initializer tĩnh khi bạn khởi tạo lớp học của bạn (Singleton pattern) và sau đó thêm mỗi trường hợp được tạo ra trong các nhà xây dựng nhà máy vào một danh sách ...

Something như thế này:

class MyObject { 
    private static List instances = new ArrayList(); 

    public static MyObject createMyObject() { 
    MyObject o = new MyObject(); 
    instances.add(new java.lang.ref.WeakReference(o)); 
    return o; 
    } 

    public static List getInstances() { 
    return instances; 
    } 

    private MyObject() { 
    // Not allowed 
    } 
    } 
+0

Một bộ băm yếu có thể là một bộ sưu tập đẹp hơn vì nó làm sạch các tham chiếu đó một cách minh bạch. 'Đặt instances = Collections.newSetFromMap (new WeakHashMap ());' –

+2

Đây không phải là giải pháp khả thi cho vấn đề hiện tại của tôi ... Tôi muốn có được các cá thể của các lớp của bên thứ ba. – barneypitt

7

Không nói chung. Nếu bạn đang sử dụng API trình gỡ lỗi, điều đó có thể xảy ra (tôi chưa chọn) nhưng bạn không nên sử dụng khác hơn để gỡ lỗi.

Nếu thiết kế của bạn yêu cầu điều này, có thể đáng xem xét lại thiết kế đó.