例如:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
// Private constructor suppresses
// default public constructor
private Singleton() {};
public static Singleton getInstance() {
return INSTANCE;
}
}
为什么我不能将INSTANCE
设置为公开,并通过Singleton.INSTANCE
进行访问?这会是什么原因?
答案 0 :(得分:3)
从技术上讲,您可以,并且在此代码中,它将无效-行为相同。
我们通常使用吸气剂的原因是:
new Singleton()
而不是访问静态变量)。如果有一百个地方直接访问该变量,则不是那么容易。答案 1 :(得分:0)
由于其良好做法是封装实例以避免样板代码,因此在这种情况下,您需要使用静态块来初始化对象,如果在需要时初始化对象(延迟加载)会更好,那么这样做可能会有所帮助您的内存使用情况。
答案 2 :(得分:-1)
从技术上讲,您可以公开Singleton.INSTANCE
,因为它是final
。但是,从您的API用户的角度来看,Singleton.INSTANCE
在不查看Singleton
类的内容的情况下是最终的,因此用户可能会试图重新分配{{ 1}}来自另一个班级。
使Singleton.INSTANCE
仅可通过Singleton.INSTANCE
访问,这使每个人都知道不可能重新分配变量。