2012-12-27 34 views
1

當我http://groovyconsole.appspot.com/在Groovy中,如果類未被調用爲什麼實例化異常?

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

我不確定背後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時,如果兩者都在同一個目錄中,第一個會自動在類路徑中)

+0

感謝您的額外診斷。我同意上述錯誤信息更具描述性。在這一點上,我將停止嘗試將類定義放入單獨的文件中,並將它們放入同一個文件中,並將單元測試的斷言語句實例化與應用程序的正常入口點一起放入。這是一個groovy腳本,在soapUI工具中作爲'testcase'文件進行評估。 – cspeter8

相關問題