java - 使用枚举的单例

标签 java enums singleton

我在 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的代码补全没有找到任何东西

谢谢!

最佳答案

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

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();

关于java - 使用枚举的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8027701/

相关文章:

java - UDP数据包分离

c++ - 通过模板-模板参数使用枚举标记对象

c++ - 单例模式 : different behavior of auto_ptr and unique_ptr

reflection - 在scala中通过字符串名称获取对象实例

ruby - 如何使用 Ruby 中的单例设计模式创建类?

java - 通过 Hibernate 持久化枚举时出现 ClassCastException

java - 更改工具栏溢出图标颜色

java - 如何在不抬起手指的情况下更改我按下的按钮? (在 LibGDX 中)

c++ - C++ 中的枚举器有自动名称查找吗?

c# - 为什么在调试时而不是在运行时检查时会出现异常/从数据库映射枚举的最佳实践是什么