Java单例类中是否需要final关键字?

SRH*_*ABS 12 java singleton

public class MySingleton{
  private static final MySingleton INSTANCE = new MySingleton();
  private MySingleton(){}
  public static getInstance(){
    return INSTANCE;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是实现Singleton的正确方法吗?如果是,那么final关键字的必要性是什么?

Ale*_*ien 0

并不是真的有必要。但使用final时它不能被单例类本身重置,这强制了一个真正的单例。然而,由于单例是不好的做法,因此可以通过添加 setInstance() 方法使它们可用于单元测试。焦虑的人可以将 setInstance 定义为私有,以便单元测试通过反射调用 setInstance。