2013-09-29 28 views
0

我的常規版本調用帶有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)

+0

你如何運行你的代碼?我測試過這個,它工作正常(有/無參數)。我認爲你有某種配置或運行時問題。代碼很好 – zaerymoghaddam

+2

這看起來像是一代類的問題。那堆棧跟蹤確實很奇怪。你使用... jdk8,也許?你的'java -version'是什麼?你的groovy文件名是什麼? – Will

+0

當你在一個名爲'2.groovy'的文件中有Groovy代碼時,Groovy將它編譯成一個名爲'2'的類。這不是有效的類名。然而,我無法弄清楚爲什麼它允許'def repeat(){}'或'def repeat(String val){}',而不是'def repeat(val){}'或'def repeat(Object val){} –

回答

1

我很愚蠢,我將這個類命名爲以數字開頭。