使用类加载器加载groovy类时出错

时间:2013-08-05 13:17:27

标签: java groovy classloader

我试图使用类加载器按名称加载groovy类,并且在类具有对另一个类中的静态内部类的引用的情况下,该类无法加载。

在我的groovy课程中,我有以下内容:

def classLoader = getClass().classLoader
try { 
    classLoader.loadClass( "com.test.TestClass" )
} catch(Throwable e) { 
    Sigil.logger.error("Error loading class: $it >> ${e.message}", e)
}

在上面,我的groovy文件TestClass里面有一个静态内部类,它扩展了另一个文件的静态内部类。当我尝试运行上面的代码时,我收到消息:

ERROR [05 Aug 2013 06:53:28,851] (invoke0:?) - Error loading class: com.test.TestClass >> startup failed:
unable to resolve class UserValidity.Validator 
 @ line 85, column 5.
       public static class Validator extends UserValidity.Validator{
       ^

1 error

有没有人遇到过在groovy中处理静态内部类和类加载的任何问题?所有类都正确编译并运行单元测试等。我会想到当我尝试在我的类加载器中显式加载类TestClass时,它还会根据需要从源代码树加载其他必要的类吗?


更新

以下是无法加载的类的片段:

class TestClass{

    //... Other normal class stuff here

    public static class Validator extends UserValidity.Validator
        @Override
        def validate(u) {
            def result = super.validate(u)
            if(!u.valid ){
                result += [isValid:false]
            }
            result
        }
    }
}

这就失败了,因为它说它无法解析对UserValidity.Validator的引用,这也很简单:

class UserValidity {

    //normal class stuff here

    public static class Validator {
        def validate(u){
            //do validation stuff
            result
        }
    }
}

两者都只是常规的常规课程。


更新2:

如果我将静态内部类UserValidity.Validator提取到一个独立的类中,并且只是使用TestClass中的静态内部类扩展它,那么它似乎有效,所以肯定似乎是一些问题内部类的父级是另一个内部类

0 个答案:

没有答案