快速可靠地查明源代码文件是否实现了接口

时间:2015-11-17 12:42:11

标签: java parsing

给定一个java源代码文件,找出它是否实现给定接口的快速可靠方法是什么?

一种可靠的方法是将文件解析为语法树(使用例如eclipse的ASTNode类)并寻找正确的节点。

快速的方法是查找带有“implements”的行,踢出注释中的行,并将接口与适当的import语句联系起来。我可能在这里错过了一些奇怪的其他案例。

你会做什么?

2 个答案:

答案 0 :(得分:2)

  

你会做什么?

我会编译类和接口的源代码,使用Class.forName()加载它们,并使用Class.isAssignableFrom来测试类是否是接口的子类型。

相对快速,完全可靠......假设源代码是​​可编译的。

请注意,这一切都可以在运行时完成,如果您使用正确实现的自定义类加载器的一次性实例来进行加载,则可以避免使用可疑类来污染JVM。

答案 1 :(得分:1)

我想说解析源代码文件既快速又可靠。但是,“快速”是一个模糊的概念,我猜它确实取决于它。不过,与扫描源文件中出现“implements”字样相比,我不会期望太多的开销 - 因此,如果后者对你来说很好,我会认为前者也应该可以接受吗?

javax.tools.* API将是一个良好的入门点;但是,还有许多用于Java的(开源)源代码解析器。

此外,here是Oracle网站上的一篇介绍性博客文章。