我对以下代码的行为感到困惑。
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.请帮助!
答案 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())。