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