是否有任何方法可以获取Java中特定类创建的对象?

时间:2011-10-09 14:44:45

标签: java object methods

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

2 个答案:

答案 0 :(得分:2)

它没有内置到API中,因为在Java方面没有“由对象创建”这样的东西。您可以使用缓存。但它并没有内置于Java中。你必须保持这个。使用Factory方法可以省去一些麻烦,所以你不要忘记将它存储在缓存中。

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); }

}

需要关注的一点是,这会导致内存泄漏的可能性很高。你可以使用WeakReferences来解决这个问题,这样当每个其他线程都失去对Object的访问权限时,set也是如此。毕竟,您不希望您的设置只存储所有内容,因此它永远不会得到GC。

答案 1 :(得分:1)

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

要小心:一个天真的实现将永远引用所有对象,这将破坏垃圾收集。 java.lang.ref.Reference<T>以及相关内容可能对此有所帮助。但坦率地说 - 这不适合初学者。