日期:2014-05-20  浏览次数:20700 次

java中,怎么获得某个类的所有对象?
有人知道吗?

------解决方案--------------------
利用java的反射机制可以得到
------解决方案--------------------
嗯,学习.是不是java.lang.reflect啊?我还没有研究过.
------解决方案--------------------
基本上办不到。如果你可以修改你的类的话,可以给它添加一个静态数组或容器,再修改构造函数,每创建一个对象就把对象的引用添加到静态数组中。如:

public class MyClass {
public static ArrayList <MyClass> ALL_INSTANTS = new ArrayList();

//....

public MyClass() {

//...

ALL_INSTANTS.add(this);
}
}

如果有多个构造函数,给每个末尾都加上ALL_INSTANTS.add(this);

这样,你就可以遍历MyClass.ALL_INSTANTS来得到所有实例了。
------解决方案--------------------
我楼上说的应该可以
------解决方案--------------------
Dan1980() 已经说得很好了,即准确又正宗 :D

我再提一个未经实践的思路吧(似乎有点偏门):

通过 ClassLoader 拦截到目标 Class,为其做一层代理包装,在代理里面处理 newInstance()……
------解决方案--------------------
好难啊,这个问题!

Dan1980() ( ) 信誉:98 Blog 2007-4-2 17:53:25 得分: 0
这要看情况了。
如果这种需要只出现在你个人的代码中,那么你完全可以用一个容器来管理你创建的所有对象。
如果是团队的需要,那么你可能要改变大家创建的方式了,每创建一个都要登记,以方便统一访问。
--------------------
那岂不是每次都去判断下,是否无效?

------解决方案--------------------
java的反射 能获得类的方法,变量字段吧,能得到由它创建的对象吗?
----------------
Class cls = Class.forName( "clsname ");
Field[] f = cls.getDeclareFields();

这样的吗?