单例使用枚举 [英] singleton using enum

查看:97
本文介绍了单例使用枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读了很多关于使用枚举创建单例类的stackoverflow。
我一定错过了一些东西,因为我无法到达INSTANCE。



这是我的代码:

  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(){
...
}
}

//将其用作。 ..
UserActivity.INSTANCE.doStuff();


I read a lot on stackoverflow regarding the creation of singleton classes using enum. I must have missed something because i can't reach the INSTANCE anywhere.

this is my code:

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() {
     ...
    }
}

and outside I'm trying to do

UserActivity.INSTANCE.getSingleton()

or

UserActivity.Singleton.

but eclipse's code completion doesn't find anything

thanks!

解决方案

The trick is to make the enum itself the singleton. Try this:

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

这篇关于单例使用枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆