有没有办法获得实现某种方法的所有类?

时间:2009-12-24 12:29:12

标签: java reflection

标题不言而喻。语言是Java。

3 个答案:

答案 0 :(得分:5)

是的,有。然而,这是一项繁琐且昂贵的工作。您需要在ClassLoader#getResources()的帮助下抓取所有类文件和所有JAR文件以及java.io.File的镜头,并在Class#forName()的帮助下加载它的所有类,最后检查方法是否为那里是Class#getMethod()

但是,有第三方API可以从手中完成繁琐的工作,但它仍然很昂贵,因为加载一个类会导致其static初始值设定项被执行。

更简洁的方法是使用annotations并注释相关方法,然后使用基于注释搜索类/方法/字段的库,例如Google Reflections。< / p>

另一方面,如果预先知道整个包名或JAR文件名,那么工作将不那么繁琐和昂贵(不需要递归地执行操作,也不需要加载整个类路径的所有类)

更新:我记得,我曾经写过示例代码来实现类似的东西,你可以找到它here。开始时很好,你只需要稍微改一下来检查方法。

答案 1 :(得分:4)

不,一般来说,你不能。如果您可以获得可用类的完整列表,则可以使用反射检查每个类 - 但是您不能向类加载器询问可用的所有内容的列表。 (例如,它可能是通过HTTP获取类,并且可能不知道所有可用的文件。)

但是,如果您知道自己对jar文件中的类感兴趣,则可以打开jar文件,查找其中的所有类文件,并向类加载器询问这些类。这有点繁琐。

这里的大局是什么?可能有更好的方法来解决问题。

答案 2 :(得分:2)

此外,在 Eclipse 中,您可以直接询问:

  

在方法上单击Clic,然后键入 Ctrl-T