给定一个java源代码文件,找出它是否实现给定接口的快速可靠方法是什么?
一种可靠的方法是将文件解析为语法树(使用例如eclipse的ASTNode类)并寻找正确的节点。
快速的方法是查找带有“implements”的行,踢出注释中的行,并将接口与适当的import语句联系起来。我可能在这里错过了一些奇怪的其他案例。
你会做什么?
答案 0 :(得分:2)
你会做什么?
我会编译类和接口的源代码,使用Class.forName()
加载它们,并使用Class.isAssignableFrom
来测试类是否是接口的子类型。
相对快速,完全可靠......假设源代码是可编译的。
请注意,这一切都可以在运行时完成,如果您使用正确实现的自定义类加载器的一次性实例来进行加载,则可以避免使用可疑类来污染JVM。
答案 1 :(得分:1)
我想说解析源代码文件既快速又可靠。但是,“快速”是一个模糊的概念,我猜它确实取决于它。不过,与扫描源文件中出现“implements”字样相比,我不会期望太多的开销 - 因此,如果后者对你来说很好,我会认为前者也应该可以接受吗?
javax.tools.* API将是一个良好的入门点;但是,还有许多用于Java的(开源)源代码解析器。
此外,here是Oracle网站上的一篇介绍性博客文章。