如何在运行时收集实现接口的所有类?

为了自动运行我的所有测试类,我查找专用目录中的所有类文件,将路径转换为包名并检查此类是否实现给定的接口:

try { Class myTestClass = Class.forName( constructedClassName ); if( myTestClass.isInstance( MyTestInterface.class ) ) { testCollection.add( myTestClass ); } } catch( Error e ) { // ignore, no valid test class } 

今天我使用这种技术遇到了一个丑陋的bug( 参见这个SO问题 )。

题:

如何收集我的所有测试类而不必忽略我不感兴趣的类可能出现的错误?

如何收集我的所有测试类而不必忽略我不感兴趣的类可能出现的错误?

你有点把自己画成一个角落……

我要做的是以下一个(或多个):

  • 修复有问题的类,以便它们加载

  • 将类放入不同的目录,创建名称列表,或使用模式匹配来区分您要/不想添加到testCollection

并记录错误当然!! 也许将它们记录在不同的地方,但如果这样做,请在主日志中留下一条响亮的消息,告诉别人在哪里查找详细信息。

没有加载的类有什么用? 为什么不先修好它们呢? 难道你不必在某个时候解决它们吗?