在不使用Metaclass的情况下直接实现Singleton模式:
class A{
static final instance = new A()
private A(){}
static getInstance(){return instance}
}
为什么私有构造函数不被groovy尊重?虽然可以直观地告诉它它是一个查看模式的单例,但与java不同,这样的实现不会限制程序员使用此类范围之外的new A()
创建此类的新实例。那么这不应该被视为其实施中的缺陷吗?
答案 0 :(得分:3)
您可以使用以下代码替换上面的代码:
@Singleton
class A{
}
并通过以下方式访问单例实例:
A singleton = A.instance
答案 1 :(得分:1)
这是当前Groovy实现中的一个错误,因此在Groovy中没有什么是私有的。看看它的JIRA issue。我最近也写了a short article。