当前位置:  开发笔记 > 编程语言 > 正文

在Java中使用Enum作为单例的最佳方法是什么?

如何解决《在Java中使用Enum作为单例的最佳方法是什么?》经验,为你挑选了4个好方法。

基于SO问题编写的最佳单例实现在Java中 - 即使用枚举创建单例 - 有什么区别/优点/缺点(构造函数省略)

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}

然后打电话 Elvis.INSTANCE.getAge()

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}

然后打电话 Elvis.getAge()



1> Jon Skeet..:

假设你绑定到将使用它给出的任何对象的属性的东西 - 你可以很容易地传递Elvis.INSTANCE,但是你不能通过Elvis.class并期望它找到属性(除非它被故意编码找到类的静态属性).

基本上,只有在需要实例时才使用单例模式.如果静态方法可以正常工作,那么只需使用它们,不要打扰枚举.


@jontro(重新)阅读答案; 他说当你必须有一个单身时使用枚举,但如果你可以用静态方法来避免单身
@Thufir:它回答了"有什么不同"的部分 - 这似乎是OP最感兴趣的部分,因为答案被接受了.

2> Nicolas..:

当你的单身人士必须实现一个接口时,一个很大的优势.按照你的例子:

public enum Elvis implements HasAge {
    INSTANCE;
    private int age;

    @Override
    public int getAge() {
        return age;
    }
}

附:

public interface HasAge {
    public int getAge();
}

它不能用静力学来完成......



3> Tom Hawtin -..:

(有状态)单身人士通常习惯于假装不使用静态变量.如果你实际上没有使用公共静态变量,那么你会欺骗更少的人.



4> Peter Lawrey..:

我会选择最简单,最清晰的选项.这有点主观,但如果你不知道什么是最清楚的,那就选择最短的选项.


+1:使用Occam的剃刀合成... :)
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有