标题不言而喻。语言是Java。
答案 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 。