動態實例化一個類的Groovy的方式this question about the Groovy way to dynamically invoke a static method的答案是非常有益的,但我在遇到以下情況的麻煩:從字符串
我定義了一個簡單的Groovy類:
class Item {
def id = 1
def data = [ "a", "b" ]
}
然後我定義想要動態地加載Item類的簡單工具類:
class Util {
static def main(args) {
def cls = "Item" as Class
def instance = cls.newInstance()
println instance.toString()
}
}
Util.groovy是在同一文件夾中Item.groovy
當我嘗試運行Util.groovy我得到以下錯誤:
Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'Item' with class 'java.lang.String'
to class 'java.lang.Class' due to:
java.lang.ClassNotFoundException: Item
at Util.main(Util.groovy:3)
,我可以讓它工作的唯一途徑是通過使用groovyc的預編譯Item.groovy,卻忽略的是點Groovy的:)
您應該將'this.class'更改爲'this.getClass()'。通常建議使用完整的方法來避免[屬性或地圖查找(或invokeMethod覆蓋)](http://groovy.329449.n5.nabble.com/class-vs-getClass-td368617.html)。 – OverZealous
爲什麼打擾我們知道這不是一張地圖?擁抱動態! ;-) –
它的工作!謝謝蒂姆! :) –