加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Singleton vs public static final变量

发布时间:2020-12-15 04:29:43 所属栏目:Java 来源:网络整理
导读:所以我知道单例模式是这样实现的: public class ClassName { private static ClassName instance; public static ClassName getInstance() { if (instance == null) { instance = new ClassName(); } return instance; } private ClassName() {}} 我想问的
所以我知道单例模式是这样实现的:

public class ClassName {
    private static ClassName instance;

    public static ClassName getInstance() {
        if (instance == null) {
            instance = new ClassName();
        }
        return instance;
    }

    private ClassName() {}
}

我想问的是为什么你不能这样做:

public class ClassName {
    public static final ClassName instance = new ClassName();
    private ClassName() {}
}

方式代码更少,似乎完全相同.当然,减去延迟初始化,但我不明白为什么懒惰初始化无论如何都会是一个重要的好处.我不是很有经验,如果你能用你的知识启发我,我将不胜感激,谢谢.

解决方法

初始化单例实例内联并让类加载器担心同步可能不是一种非常常见的做法,但它绝对不是闻所未闻的.

然而,常见的习惯是将实例变量设为私有并通过getter返回它,这样其他代码就不会直接依赖它.这样,如果将来你决定想要更高级的东西(例如,你提到的延迟初始化),你可以轻松地重构代码而不破坏API:

public class ClassName {
    private static final ClassName instance = new ClassName();

    public static ClassName getInstance() {
        return instance;
    }

    private ClassName() {}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读