【发布时间】:2012-06-11 23:11:42
【问题描述】:
假设有两个类,ObjectA 和 ObjectB。 ObjectA 类有一个创建ObjectB 类对象的方法如下:
private ObjectB createObjectB() {
Object b = new ObjectB();
return b;
}
我想跟踪ObjectB 的所有实例。有什么更好的方法来做到这一点?
- 以
ArrayList内部类ObjectA的形式跟踪所有对象。 - 或
ObjectB中的某个类变量。
每种方法的优缺点是什么?如果我知道 ObjectB 对象只会从 ObjectA 中的这种方法创建,这会有所不同吗?
请注意,ObjectA 的实例永远只有一个,但 ObjectB 的实例数量是可变的。
【问题讨论】:
-
这取决于您为什么需要跟踪对象的所有实例。你的用例是什么?
-
引用需要用到什么?
-
为了得到 ObjectB 实例的垃圾收集,最多应该保留weak references 的列表;那里有一些弱 ref 集合类,但不幸的是 JSE 中没有。
-
我想随时使用 array.length / ArrayList.length 等知道 ClassB 实例的数量。我还希望能够遍历该数组中引用的对象以对每个对象执行某些操作一。如果我有第三类 ObjectC 也可以创建 objectB 对象,并且我只想遍历 objectC 创建的对象,而不是 objectA,最好保留一个单独的数组,还是遍历所有 B 的检查对于一个条件,然后只是修改它们?
-
我想我会在创建它们的每个类中保存对 B 类对象的引用,然后只在 B 类中保存对这些数组/集合的引用。这样每个对象只需要一个直接引用,同时仍然有一个简单的方法来获取所有现有的 B 对象。只有当一个类第一次请求新的 B 类对象时,才会在 B 类中进行额外的引用,每个后续的 on 只引用一次,因此应该非常有效。谢谢大家!
标签: java instance-variables class-variables