0

我正在尝试使用类加载器按名称加载一个 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那么它似乎可以工作,所以内部类的父级是另一个内部类肯定会出现一些问题

4

0 回答 0