【问题标题】:Is there any method to obtain objects created by a specific class in Java?是否有任何方法可以获取由 Java 中特定类创建的对象?
【发布时间】:2011-10-09 14:44:44
【问题描述】:

我需要获取一个类创建的所有对象。有没有预建的方法 在 Java API 中执行此操作?

【问题讨论】:

    标签: java object methods


    【解决方案1】:

    它没有内置到 API 中,因为在 Java 中没有“由对象创建”之类的东西。您可以为此使用缓存。但它不是内置于 Java 中的。你必须保持这个。使用工厂方法可以省去一些麻烦,这样就不会忘记将其存储在缓存中。

    class Creator {
    
        Set<Stuff> set = new HashSet<Stuff>();
    
        // each time you create an object, do this
        void foo() {
            Stuff stuff = // what you create
            set.put(stuff);
        }
    
        // you get them like
        Set<Stuff> objectsCreatedByThis() { return Collections.unmodifiableSet(stuff); }
    
    }
    

    需要注意的一点是,这将导致内存泄漏的可能性很高。您可以使用 Wea​​kReferences 来解决这个问题,这样当每个其他线程都无法访问该对象时,集合也会如此。毕竟,您不希望您的 set 只存储所有内容,因此它永远不会被 GC'd。

    【讨论】:

      【解决方案2】:

      没有。标准语言和标准 API 中没有任何东西可以帮助您。您唯一的机会是将您的问题限制在完全由您控制的某个域中。然后,您可以通过工厂或直接在构造函数中使用某种引用跟踪。

      但要小心:一个简单的实现将永远保留对所有对象的引用,这会破坏垃圾收集。 java.lang.ref.Reference&lt;T&gt; 和相关的东西在这里可能会有所帮助。但坦率地说 - 这不适合初学者。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 2010-11-10
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 2011-05-24
        • 2016-05-04
        • 2019-10-12
        相关资源
        最近更新 更多