在 Java 单例类中,最终关键字是必需的吗?
public class MySingleton{
private static final MySingleton INSTANCE = new MySingleton();
private MySingleton(){}
public static getInstance(){
return INSTANCE;
}
}
这是实现单例的正确方法吗?如果是,那么最终关键词的必要性是什么?
public class MySingleton{
private static final MySingleton INSTANCE = new MySingleton();
private MySingleton(){}
public static getInstance(){
return INSTANCE;
}
}
这是实现单例的正确方法吗?如果是,那么最终关键词的必要性是什么?
Final 将确保实例在创建后不可更改。如果你只包含一个构造函数,而没有 setter,这没什么大不了的。没有人可以更改您的实例,您也不会更改它。
将其保留在那里以备以后更改类并不是一个坏主意。不可变性提供了一些优势(更容易序列化,防止有人在你背后更改你的对象,等等)。
将不变性放回去比把它拿出来更难。防御性地编写代码,这样以后就不会有人搞砸了。
通常首选的方法是使用枚举
public enum MySingleton {
INSTANCE;
}
在您的示例中,final 关键字显示意图,并将阻止重新分配 (= bug),但不是绝对必要的。
特别是,变量是静态的,它不需要是最终的,就可以安全地发布在多线程环境中。