groovy singleton访问重载的构造函数

时间:2011-10-16 15:47:54

标签: groovy

groovy Singleton(在Groovy 2.6中注意,如果要包含显式构造函数,必须将strict设置为false)

@Singleton( strict = false )
class test {

    private test(){
        //some Method call      
    }

    private test(def x){
        //some Method call
    }
}

test.groovy

def test1 = test.instance

当我发出以下声明时,它适用于我,我可以看到defualt 构造函数被称为

如何在使用第二个construcor参数时创建instanace

如果我发出

def test2 = test("anish").instance 

它引发了我的错误我如何解决这个任何建议

groovy.lang.MissingMethodException: No signature of method: test.test() is applicable for argument types: (java.lang.String) values: [anish]
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:143)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:151)

1 个答案:

答案 0 :(得分:6)

在第一种情况下,您正在访问静态属性test.instance,后者又调用静态方法test.getInstance()。在第二种情况下,看起来您正在尝试将第二个构造函数作为方法调用。这不是有效的groovy:你需要使用new关键字来创建一个触发构造函数的实例。此外,将构造函数设为私有使得除了在类本身之外它是不可访问的。

如果你需要实例化另一个实例,它首先可能不应该是一个单例。