使用枚举的单例

2022-09-01 19:52:55

我读了很多关于stackoverflow的文章,关于使用枚举创建单例类。我一定错过了什么,因为我无法在任何地方到达实例。

这是我的代码:

public class UserActivity {

    private DataSource _dataSource;
    private JdbcTemplate _jdbcTemplate;

    static enum Singleton {
        INSTANCE;

        private static final UserActivity singleton = new UserActivity();

        public UserActivity getSingleton() {
            return singleton;
        }
    }

    public UserActivity() {
        this._dataSource = MysqlDb.getInstance().getDataSource();
        this._jdbcTemplate = new JdbcTemplate(this._dataSource);
    }

    public void dostuff() {
     ...
    }
}

和外面我正在努力做

UserActivity.INSTANCE.getSingleton()

UserActivity.Singleton.

但是 eclipse 的代码完成没有找到任何东西

谢谢!


答案 1

诀窍是使枚举本身成为单例。试试这个:

public enum UserActivity {
    INSTANCE;

    private DataSource _dataSource;
    private JdbcTemplate _jdbcTemplate;

    private UserActivity() {
        this._dataSource = MysqlDb.getInstance().getDataSource();
        this._jdbcTemplate = new JdbcTemplate(this._dataSource);
    }

    public void dostuff() {
     ...
    }
}

// use it as ...
UserActivity.INSTANCE.doStuff();

答案 2

INSTANCE是 的成员,而不是 - 所以你需要:SingletonUserActivity

UserActivity.Singleton.INSTANCE.getSingleton();

但是,您实际上并没有创建单例 - 通常您会使类型本身成为枚举,而不是在类型中嵌入枚举...UserActivity


推荐