Java反射:通过输入给定类的名称来获取该类的实例?
是否可以通过以字符串形式输入该类的名称来获取该类的所有实例 像这样的Java反射:通过输入给定类的名称来获取该类的实例?,java,oop,class,reflection,instance,Java,Oop,Class,Reflection,Instance,是否可以通过以字符串形式输入该类的名称来获取该类的所有实例 像这样的 var instances = Reflection.findClass("com.someone.MyClass").getInstances(); 任何反馈都将不胜感激。谢谢。不,没有这样的。如果您连接到调试API中,您可能可以执行此操作,但在“正常”运行时无法执行此操作。我不知道在运行时执行此操作的方法,但是,如果您愿意“脱机”执行此操作,您可以执行以下操作: 大吃一惊 将堆转储加载到 打开OQL窗格,输入命令,如se
var instances = Reflection.findClass("com.someone.MyClass").getInstances();
任何反馈都将不胜感激。谢谢。不,没有这样的。如果您连接到调试API中,您可能可以执行此操作,但在“正常”运行时无法执行此操作。我不知道在运行时执行此操作的方法,但是,如果您愿意“脱机”执行此操作,您可以执行以下操作:
select*from com.someone.MyClass
。运行此查询将返回执行堆转储时内存中的实例JVM不保留每个类的所有实例的任何内部集合。但是你可以自己做这种事。。。如果在您感兴趣的每个特定类中实现该行为。您只需要小心,通过保留对实例的引用来避免产生内存泄漏,否则这些实例将是可回收的垃圾。这里的问题是找不到类对象(这可以通过
class.forName()
)来完成),但通常类不知道其实例
如果可以控制类,则可以创建所有实例的注册表,并将每个实例添加到构造函数中。但是,您应该小心,不要因此而禁用垃圾收集,因此请使用弱引用而不是普通引用。这是探查器所擅长的。使用YourKit,您可以搜索基于通配符类的实例,并从最大到最小或其他排序条件检查/导航到它们。类似的问题:“使用Java反射,是否可以获取局部变量的名称?”如果您想知道一个类在运行时有多少个实例,在成员变量中保存引用将授予u访问权限。