如何使用"单元素枚举类型"使这个类成为单例?

J. *_* K. 3 java enums

我有这个类,我用这个单独的方式:

FlagOfficer.instance().someVariable
Run Code Online (Sandbox Code Playgroud)

这是该类的当前实现:

public class FlagOfficer {

    public FlagOfficer() {

    }

    static FlagOfficer flagOfficer = null;

    public static FlagOfficer instance() {
        if (flagOfficer == null) {
            flagOfficer = new FlagOfficer();
        }
        return flagOfficer;
    }

    public boolean getLastBackupDate;
    public boolean syncProcessStartedOnce;
}
Run Code Online (Sandbox Code Playgroud)

我现在正在阅读"Effective Java"一书,他们说实现单例模式的最佳方法是使用单元素枚举类型

以下是本书的一个示例:

public enum Elvis {
    INSTANCE;
    public void leaveTheBuilding() { ... }
}
Run Code Online (Sandbox Code Playgroud)

那么如何转换我的类以便它使用这种模式呢?我以后如何使用它?

nhy*_*ted 11

public enum FlagOfficer {
    // Enum instances/values should be declared first.
    // Use INSTANCE(arg1, ..) if constructor accepts agruments.
    INSTANCE; 

    // Constructor can accept arguments as well.
    private FlagOfficer() {

    }

    private Date lastBackupDate;
    private boolean syncProcessStartedOnce;

    public Date getLastBackupDate() {
        return lastBackupDate;
    }

    public boolean isSyncProcessStartedOnce() {
        return syncProcessStartedOnce;
    }
 }
Run Code Online (Sandbox Code Playgroud)

用法:

FlagOfficer fo = FlagOfficer.INSTANCE;
Run Code Online (Sandbox Code Playgroud)

  • 您还可以添加`public static FlagOfficer instance(){return INSTANCE;}`方法来获得单例类的感觉.这样,你的单例的使用者仍然会像以前一样获得FlagOfficer对象:`FlagOfficer.instance();`. (4认同)