在groovy中加载类的问题

时间:2011-04-14 07:35:00

标签: java groovy

我对以下代码的行为感到困惑。

def file = new File("C:/MyeclipseWorkspace/SampleGroovyProject/src/templates/apixmls/one.groovy")
println file.getText()
println getClass()
ClassLoader parent = getClass().getClassLoader()
println parent

当我将它作为一个groovy脚本运行时,我得到所需的输出如下

class ConsoleScript10
groovy.lang.GroovyClassLoader$InnerLoader@18b995c

相反,当我只是简单地更改在函数中包装脚本并执行它时,它的行为方式如下:

对于所做的更改,

static void foo(){
def file = new File("C:/MyeclipseWorkspace/SampleGroovyProject/src/templates/apixmls/one.groovy")
println file.getText()
println getClass()
ClassLoader parent = getClass().getClassLoader()
println parent
}
foo()

上面的代码给出了一个不同的输出如下:

class java.lang.Class
null

请告诉我第二个代码段有什么问题。我想在一个函数中实现类加载,并获得所需的输出,如代码片段1.请帮助!

1 个答案:

答案 0 :(得分:3)

如果您在groovyConsole中使用Groovy的AST浏览器查看最终结果,您将看到以下内容:

    public class script1302766776488 extends groovy.lang.Script { 
        // ...
        public static void foo() {
            this.println(this.getClass())
            java.lang.ClassLoader parent = this.getClass().getClassLoader()
            this.println(parent)
        }
        // ...

因为静态foo方法是生成的脚本类后代的一部分,所以对this.getClass()的调用只返回java.lang.Class,因为你在静态方法中,而script1302766776488类的类是java.lang的.class。

如果需要对当前类加载器的引用,只需调用getClassLoader()(不带getClass())。