【发布时间】:2011-10-09 14:44:44
【问题描述】:
我需要获取一个类创建的所有对象。有没有预建的方法 在 Java API 中执行此操作?
【问题讨论】:
我需要获取一个类创建的所有对象。有没有预建的方法 在 Java API 中执行此操作?
【问题讨论】:
它没有内置到 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); }
}
需要注意的一点是,这将导致内存泄漏的可能性很高。您可以使用 WeakReferences 来解决这个问题,这样当每个其他线程都无法访问该对象时,集合也会如此。毕竟,您不希望您的 set 只存储所有内容,因此它永远不会被 GC'd。
【讨论】:
没有。标准语言和标准 API 中没有任何东西可以帮助您。您唯一的机会是将您的问题限制在完全由您控制的某个域中。然后,您可以通过工厂或直接在构造函数中使用某种引用跟踪。
但要小心:一个简单的实现将永远保留对所有对象的引用,这会破坏垃圾收集。 java.lang.ref.Reference<T> 和相关的东西在这里可能会有所帮助。但坦率地说 - 这不适合初学者。
【讨论】: