Java单例是否应该使用静态变量?

And*_*eas 16 java singleton

Java中的单例是否应该使用静态变量或成员变量?两者都有任何优势吗?

Bat*_*eba 12

您应该使用成员变量.单例是一个对象(即一个类的实例),因此应该这样建模; 即使你只打算创造其中一个.

静态应该用于类级变量.


Boh*_*ian 7

需要对单例实例进行静态引用,但实例本身应该使用实例变量,就像常规类一样.

原因是单例实例毕竟是一个对象,所以通常的好设计原则仍然适用于它的类.

此外,今天它是一个单例,但明天它可能是一个ThreadLocal,或者没有任何实例创建限制.如果以通常的方式设计类,那么这些架构选择之间的变化是非常低的.如果使用静态字段,则此类更改将需要更多维护工作才能使字段成为非静态字段.


anu*_*ava 5

您可以避免使用静态变量并使用Enum:

public enum MySingleton {
    INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)

你可以访问这个单身人士MySingleton.INSTANCE.

枚举是线程安全的,通过Enum实现Singleton可确保您的单例即使在多线程环境中也只有一个实例.