在Groovy中,如果没有调用类为什么实例化异常?

时间:2012-12-27 23:52:47

标签: oop groovy

当我在http://groovyconsole.appspot.com/

执行以下实验代码子集时
class FileHandler {
    def rootDir

    FileHandler(String batchName) {
        rootDir = '.\\Results\\'+batchName+'\\'
    }
}

//def fileHandler = new FileHandler('Result-2012-12-15-10-48-55')

异常结果:

java.lang.NoSuchMethodException: FileHandler.<init>()

当我取消注释实例化类的最后一行时,错误就会消失。

有人可以解释为什么会这样吗?我基本上试图将类的定义和实例化分离为2个文件,分别进行评估。感谢

1 个答案:

答案 0 :(得分:2)

我不确定http://groovyconsole.appspot.com/背后的确切实现细节(源自那里的源指向Gaelyk,我没有看过)。我敢打赌它正在寻找你所呈现的类的无参数构造函数,以便找到可运行的东西。 (请注意,如果您提供,它仍然无法正常工作,因为它需要main():/)

在groovyConsole中本地运行会更快地消失,并显示以下错误消息:

groovy.lang.GroovyRuntimeException: This script or class could not be run. It should either:
- have a main method,
- be a JUnit test or extend GroovyTestCase,
- implement the Runnable interface,
- or be compatible with a registered script runner.

这可能更具描述性和重点。如果你想将一些Groovy作为一个简单的脚本运行,你需要提供一个跳入点。最简单的方法是在任何类定义之外的groovy文件中的可执行语句(例​​如,取消注释实例化语句)。或者,使用main方法的类应该这样做。 (见here)。

如果您想要分解2个文件,可以将类文件def保存在一个groovy文件中(例如First.groovy)并创建第二个文件(例如,Second.groovy)你的可执行语句。 (我相信当你运行groovy Second时,第一个会自动进入类路径,如果它们都在同一个目录中)