为什么Groovy认为我从静态方法传递类的实例?

时间:2012-07-06 20:52:27

标签: groovy static configparser missingmethodexception

我是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方法时,它会在线程&#34; main&#34;中抱怨Exception。 groovy.lang.MissingMethodException:没有方法签名:groovy.util.ConfigSlurper.parse()适用于参数类型:(CharacterMap,java.net.URL) 如您所见,我只传递一个参数,该参数被声明为URL。由于类的所有方法都是静态的,并且在任何地方都没有引用任何构造函数,因此根本不会创建实例,更奇怪的是它被传递到解析方法中。我已经读过Stack Overflow上的其他人获得MissingMethodException(虽然通常与闭包相关而不是多余的参数),并且它被归咎于Eclipse。我在IntelliJ而不是Eclipse中运行它。

编辑:在回复下面的评论时,groovy版本是1.8.6。这是堆栈跟踪:

  

线程中的异常&#34; main&#34; groovy.lang.MissingMethodException:没有   方法签名:groovy.util.ConfigSlurper.parse()适用   对于参数类型:(CharacterMap,java.net.URL)值:   [CharacterMap @ 34374a16,文件:/ C:/ Program Files   (x86)/ JetBrains / IntelliJ IDEA社区版   11.1.2 / UCP /配置/ CharacterMap.groovy]

     

可能的解决方案:解析(java.net.URL),解析(groovy.lang.Script,   java.net.URL),解析(groovy.lang.Script),解析(java.lang.Class),   parse(java.lang.String),parse(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)     在   org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)     在   org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)     在groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:148)at at   groovy.util.ConfigSlurper $ parse.call(未知来源)at   org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)     在   org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)     在   org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)     在ucp.cms.search.CharacterMap.ASCIIize(CharacterMap.groovy:26)at   ucp.cms.search.CharacterMap.main(CharacterMap.groovy:51)at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:601)at   com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

     

使用退出代码1完成处理

0 个答案:

没有答案