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

时间:2010-02-05 22:32:38

标签: java reflection noclassdeffounderror

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

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

今天我使用这种技术遇到了一个丑陋的bug(see this SO question)。

问题:

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

2 个答案:

答案 0 :(得分:1)

  

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

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

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

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

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

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

答案 1 :(得分:1)

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