我想在我的Groovy代碼中重寫java類型實例的方法的功能,但我得到一個classcast異常。如何用Groovy元編程重寫java類型實例的方法?
我看着指南貼here,但我不能得到它的工作。
由於我的實際問題有點混亂,下面是一些可運行的示例代碼,失敗時會出現相同的錯誤。 在這個例子中,我想覆蓋java.lang.String類的實例的substring方法。實際上,我想重寫一個沒有相應Groovy實現的類的實例的方法,因此我的示例的答案不是簡單地使用Groovy字符串實例。
class example {
static void main(args) {
java.lang.String hey = new java.lang.String("hey")
ExpandoMetaClass emc = new ExpandoMetaClass(java.lang.String, false)
emc.substring = {
"This is not a very good substring implementation"
}
emc.initialize()
def proxiedHey = new groovy.util.Proxy().wrap(hey)
proxiedHey.setMetaClass(emc)
printf proxiedHey.toString()
printf proxiedHey.substring(1)
}
}
上述示例在第12行失敗,即printf meh.toString()。拋出的異常是
夾縫:java.lang.ClassCastException: groovy.util.Proxy不能在 example.main(test.groovy:12)被轉換爲 java.lang.CharSequence中
那麼,我做什麼錯誤的任何想法,或者如果有另一種方法來解決我的java類型實例的方法添加和/或重寫的問題?
我正在使用Groovy版本1.7.4。
感謝您的及時正確的回覆! – John 2010-11-04 13:11:36