我需要获取类创建的所有对象。有没有预先建立的方法 在Java API中执行此操作?
答案 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>
以及相关内容可能对此有所帮助。但坦率地说 - 这不适合初学者。