获取一个类的所有实例

27

由于您将实例化它们,因此只需保留对每个实例的(弱?Java是否具有弱引用?)引用即可。但我怀疑任何需要这样做的设计... - Mitch Wheat
2个回答

29
你可以在实例化类(单例模式)时使用Factory静态初始化器,然后将每个生成的实例添加到工厂构造函数中的List中...
像这样:
  class MyObject {
    private static List instances = new ArrayList();

    public static MyObject createMyObject() {
    MyObject o = new MyObject();
    instances.add(new java.lang.ref.WeakReference(o));
    return o;
    }

    public static List getInstances() {
    return instances;
    }

    private MyObject() {
    // Not allowed 
    }
  }

4
一个弱哈希集合可能是一个更好的集合,因为它可以透明地清除这样的引用。Set<MyObject> instances = Collections.newSetFromMap(new WeakHashMap<MyObject, Boolean>()); - Peter Lawrey
3
这不是我目前问题的可行解决方案...我想获取第三方类的实例。 - barneypitt

9

一般情况下是不允许的。如果您正在使用调试器API,这可能是可能的(我没有检查过),但您不应该在非调试情况下使用它。

如果您的设计需要这样做,那么重新考虑您的设计可能会更值得。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接