2

我是 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])
    }
}

当它调用解析方法时,它会在线程“主”groovy.lang.MissingMethodException 中抱怨异常:没有方法签名:groovy.util.ConfigSlurper.parse() 适用于参数类型:(CharacterMap, java.net.URL ) 如您所见,我只传递了一个参数,它被声明为一个 URL。由于类的所有方法都是静态的,并且在任何地方都没有引用构造函数,所以创建一个实例有点奇怪,更奇怪的是它被传递到 parse 方法中。我读过 Stack Overflow 上的其他人得到 MissingMethodException (尽管通常与闭包而不是多余的参数有关),并将其归咎于 Eclipse。我在 IntelliJ 而不是 Eclipse 中运行它。

编辑:针对下面的评论,groovy 版本是 1.8.6。这是堆栈跟踪:

线程“主”groovy.lang.MissingMethodException 中的异常:没有方法签名:groovy.util.ConfigSlurper.parse() 适用于参数类型:(CharacterMap, java.net.URL) 值:[CharacterMap@34374a16,文件: /C:/Program Files (x86)/JetBrains/IntelliJ IDEA Community Edition 11.1.2/UCP/config/CharacterMap.groovy]

可能的解决方案:parse(java.net.URL), parse(groovy.lang.Script, java.net.URL), parse(groovy.lang.Script), parse(java.lang.Class), parse(java.lang .String),解析(java.util.Properties)

在 org.codehaus.groovy.runtime.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) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java :145) 在 groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:148) 在 groovy.util.ConfigSlurper$parse.call(Unknown Source) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java :42) 在 org.codehaus.groovy.runtime 的 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)。callsite.AbstractCallSite.call(AbstractCallSite.java:116) at ucp.cms.search.CharacterMap.ASCIIize(CharacterMap.groovy:26) at ucp.cms.search.CharacterMap.main(CharacterMap.groovy:51) at sun.reflect .NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method .java:601) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution .application.AppMain.main(AppMain.java:120)NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution .application.AppMain.main(AppMain.java:120)

进程以退出代码 1 结束

4

0 回答 0