gpt4 book ai didi

java - 为什么枚举是单例的最佳实现?

转载 作者:行者123 更新时间:2023-12-01 16:49:24 26 4
gpt4 key购买 nike

我读过《Effective Java》,其中指出单例最好使用 enum 实现。

This approach is functionally equivalent to the public field approach, except that it is more concise, provides the serialization machinery for free, and provides an ironclad guarantee against multiple instantiation, even in the face of sophisticated serialization or reflection attacks. While this approach has yet to be widely adopted, a single-element enum type is the best way to implement a singleton.

尽管如此,这似乎是实现动态序列化和真正的单实例的权衡,但是您失去了经典单例的更友好的 OOP 方法。枚举不能被继承,只能实现一个接口(interface),如果你想提供一个骨架类,你需要创建一个辅助类。

那么,除了上述原因之外,为什么我们应该接受枚举作为单例的最佳实现呢?

最佳答案

this seems like a trade-off to achieve on the fly serialization

对我来说,写这样的东西要简单得多,更简洁

enum Singleton {
INSTANCE;
}

如果您需要编写更多代码或引入复杂性,那么就这样做,但恕我直言,这很少需要。

you lose the more friendly OOP approach of a classical singleton.

我发现使用字段更简单。

Enums can't be inherited,

确实如此,但是拥有多个单例本身就值得怀疑。枚举可以从接口(interface)继承,这允许您将一种实现交换为另一种实现。

If you want to provide a skeleton class you need to create a helper class

辅助类没有任何状态。骨架类可能有某种状态,在这种情况下您需要委派。

顺便说一句:您可以使用 enum 作为辅助类

enum Helper {;
public static my_static_methods_here;
}

why should we accept enum as the best implementation for a singleton

我会遵循 YAGNI原则。只开发您需要的内容,而不是您想象可能需要的内容。

关于java - 为什么枚举是单例的最佳实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61723461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com