当我在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个文件,分别进行评估。感谢
答案 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
时,第一个会自动进入类路径,如果它们都在同一个目录中)