1

当我在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 个文件,分别进行评估。谢谢

4

1 回答 1

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方法的类应该这样做。(见这里)。

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

于 2012-12-28T04:05:03.693 回答