我的常規版本調用帶有PARAM的方法時,2.1.7Groovy中
這裏是我的代碼happend。它只發生在我用param調用給定的方法時。如果它是一個沒有參數的方法,那麼一切都可以。
Exception thrown 九月 29, 2013 5:38:49 下午 org.codehaus.groovy.runtime.StackTraceUtils sanitize
WARNING: Sanitizing stacktrace:
java.lang.ClassFormatError: Illegal class name "2$repeat" in class file 2$repeat
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.define(ClassLoaderForClassArtifacts.java:42)
at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:86)
at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:84)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.defineClassAndGetConstructor(ClassLoaderForClassArtifacts.java:84)
at org.codehaus.groovy.runtime.callsite.CallSiteGenerator.compilePogoMethod(CallSiteGenerator.java:217)
at org.codehaus.groovy.reflection.CachedMethod.createPogoMetaMethodSite(CachedMethod.java:228)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.createCachedMethodSite(PogoMetaMethodSite.java:212)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.createPogoMetaMethodSite(PogoMetaMethodSite.java:188)
at groovy.lang.MetaClassImpl.createPogoCallCurrentSite(MetaClassImpl.java:3121)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallCurrentSite(CallSiteArray.java:108)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
at 2.run(2.groovy:6)
你如何運行你的代碼?我測試過這個,它工作正常(有/無參數)。我認爲你有某種配置或運行時問題。代碼很好 – zaerymoghaddam
這看起來像是一代類的問題。那堆棧跟蹤確實很奇怪。你使用... jdk8,也許?你的'java -version'是什麼?你的groovy文件名是什麼? – Will
當你在一個名爲'2.groovy'的文件中有Groovy代碼時,Groovy將它編譯成一個名爲'2'的類。這不是有效的類名。然而,我無法弄清楚爲什麼它允許'def repeat(){}'或'def repeat(String val){}',而不是'def repeat(val){}'或'def repeat(Object val){} –