我是Groovy的新手,所以我可能做错了 . 我编写了一个配置,由ConfigSlurper采用 . 但是当我真正尝试解析它时会出现问题 . 我的代码如下:
class CharacterMap {
public static final String CHARACTER_CONFIGURATION = 'location'
static Map<String,String> characterMap = null
public static String ASCIIize(String input)
{
if (!characterMap)
{
def property = System.getProperty( CHARACTER_CONFIGURATION )
ConfigObject config = null
if( property ) {
ConfigSlurper cs = new ConfigSlurper()
File file = new File( property )
URL location = file.toURL()
config = cs.parse(location)
}
if (config)
{
characterMap = config.characters
}
else
{
getAnonymousLogger().logp WARNING, getClass().name, 'constructor',
"Server configuration groovy file not configured with system property ${CHARACTER_CONFIGURATION}"
return input
}
}
for (String key: characterMap.keySet())
{
if (input.contains(key))
{
input = input.replace(key, characterMap.get(key))
}
}
return input
}
public static void main(String[] args)
{
print ASCIIize(args[0])
}
}
当它调用parse方法时,它会在线程“main”中抱怨Exception groovy.lang.MissingMethodException:没有方法签名:groovy.util.ConfigSlurper.parse()适用于参数类型:(CharacterMap,java.net.URL )正如你所看到的,我只传入一个参数,它被声明为一个URL . 由于该类的所有方法都是静态的,并且在任何地方都没有引用任何构造函数,因此实际创建一个实例有点奇怪,更奇怪的是它仍然被传递给parse方法 . 我已经阅读了Stack Overflow上的其他人获得MissingMethodException(虽然通常与闭包相关而不是多余的参数),并且它被归咎于Eclipse . 我在IntelliJ而不是Eclipse中运行它 .
编辑:在回应下面的评论时,groovy版本是1.8.6 . 这是堆栈跟踪:
线程“main”中的异常groovy.lang.MissingMethodException:没有方法签名:groovy.util.ConfigSlurper.parse()适用于参数类型:(CharacterMap,java.net.URL)值:[CharacterMap @ 34374a16,file :/ C:/ Program Files(x86)/ JetBrains / IntelliJ IDEA Community Edition 11.1.2 / UCP / config / CharacterMap.groovy]可能的解决方案:解析(java.net.URL),解析(groovy.lang.Script,java .net.URL),在org.codehaus.groovy.runtime中解析(groovy.lang.Script),解析(java.lang.Class),解析(java.lang.String),解析(java.util.Properties) . ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)位于org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java: 46)在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)at groovy . util.ConfigSlurper.parse(ConfigSlurper.groovy:148)位于org的org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)的groovy.util.ConfigSlurper $ parse.call(未知来源) . codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)at ucp.cms.search.CharacterMap.ASCIIize( CharacterMap.groovy:26)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的ucp.cms.search.CharacterMap.main(CharacterMap.groovy:51)处 . 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at com.intellij.rt.execution.application.AppMain.main(AppMain.java) :120)流程以退出代码1结束