我试图使用类加载器按名称加载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
中的静态内部类扩展它,那么它似乎有效,所以肯定似乎是一些问题内部类的父级是另一个内部类