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)
答案 0 :(得分:6)
在第一种情况下,您正在访问静态属性test.instance
,后者又调用静态方法test.getInstance()
。在第二种情况下,看起来您正在尝试将第二个构造函数作为方法调用。这不是有效的groovy:你需要使用new
关键字来创建一个触发构造函数的实例。此外,将构造函数设为私有使得除了在类本身之外它是不可访问的。
如果你需要实例化另一个实例,它首先可能不应该是一个单例。