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

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

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

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

你会怎么做?

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

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

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

你会怎么做?

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

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

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