3

从 Java 5 开始,据说创建单例的最佳方法是使用单元素枚举类型。

例子:

public enum SuperSingleton implements Zooma{
    INSTANCE;

    /**
     */
    public void fightTheBattle(){
        System.out.println("I am fighting the battle!!!");
    }

    @Override
    public void runningWild() {
        //This is method implemented from the Zooma interface.      
    }
}

根据 Joshua Bloch 的说法,单元素枚举类型单例是;

  • 更简洁
  • 免费提供序列化机制
  • 并提供了针对多重实例化的铁证。

我可以看到它是如何更简洁的,以及它是如何提供针对多重实例化的铁定的, 但它是如何免费提供序列化机制的呢?

这是单例通过枚举获得的东西吗?

4

3 回答 3

3

Enum是的,枚举都是从实现Serializable.

于 2011-04-22T20:15:21.480 回答
1

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html

是的 :)

于 2011-04-22T20:18:52.420 回答
1

我不是 100% 确定,但我认为如果你反序列化一个序列化的单例,那么你可能会得到多个实例。枚举实例将始终保持为单例。

因此,您将获得“更多的序列化”,然后是仅实现序列化所获得的。

于 2011-04-22T20:24:20.327 回答