groovy singleton访问重载的构造函数

ani*_*ish 0 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
    }
}
Run Code Online (Sandbox Code Playgroud)

test.groovy

def test1 = test.instance
Run Code Online (Sandbox Code Playgroud)

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

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

如果我发出

def test2 = test("anish").instance 
Run Code Online (Sandbox Code Playgroud)

它抛出我的错误如何解决这个任何建议

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)
Run Code Online (Sandbox Code Playgroud)

ata*_*lor 6

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

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