这可能是非常明显的问题,但如果您知道值的列表将不断增加,那么使用Enum类会好吗?
假设您定义了一个事件Enum,首先它只包含Poo,然后我们知道我们总是有一些新的需求,它也变成了Poo,App,Laa,并且不断地变化,
那么,在这种情况下,最好的方法是什么?
发布于 2019-11-24 22:28:52
tl;dr
Set、List或Map。已知于编译时
当域(所有可能的值的集合)在编译时已知时,枚举是合适的。
如果你的公司今年提供两种产品( Poo & your ),那就为这两种元素做点说明吧。
public enum Product { POO , TOO }明年,你的公司决定通过添加App & Laa来增加他们的产品。作为计划部署的一部分,在枚举中再添加两个对象。
public enum Product { POO , TOO , APP , LAA }顺便说一句,请注意命名约定。枚举有一个常规的类名(首字母上限)。被自动实例化的对象是常量,所以用大写字母命名.
另外,请注意,Java中的enum工具非常灵活和强大,比大多数语言中常见的命名a-s enum方案都要灵活得多。您可以在Java枚举上拥有成员变量、方法和构造函数。例如,您可以添加一个getDisplayName方法,以提供比全大写对象名更适合用户界面的文本,如DayOfWeek::getDisplayName中所示。您可以添加相当多的功能,如ChronoUnit.between。
在运行时使用Java中的枚举不能做的是添加或删除对象。因此,您需要在编译时知道您的域。但是,在使用一组枚举对象时,可以使用高度优化的EnumSet和EnumMap类。
在运行时已知
如果无法在编译时确定域,如果用户可以在运行时添加或删除元素,则使用集合 (如List、Set或Map )而不是枚举。
辛格尔顿
虽然最初不是作为Java中Enum的目的,但enum恰好是实现https://en.wikipedia.org/wiki/Singleton_pattern设计模式的最安全(也是最简单)的方法。
约书亚·布洛赫博士等人在著名的“有效Java”一书中解释了这一方法。使用枚举解决了单个实例的其他方法存在的多个模糊的技术问题。
发布于 2019-11-24 21:54:01
你的问题很笼统,我敢肯定没有一个正确的答案。但是根据spring*标记来判断,我想您可能是在询问DTO中的枚举,这些枚举是以序列化的形式通过您的系统发送的。如果是这样的话,我建议在DTO中选择String,而在单个应用程序中使用enum是可以的。然后,您将只关心以工厂方式进行反序列化/转换,能够通过日志记录/提供回退或有意义的错误来优雅地处理未知/缺失常量。
发布于 2019-11-24 22:07:07
这取决于逐个案例的情况,而你的问题没有太多的背景。但是,我确实建议在许多情况下使用ENUM,包括如果您期望ENUM的列表增加。
使用它们的一些理由是:
我相信还有更多的原因,有时我会发现它就像一张目录。在很多情况下,你可以完全避免它,而且很好,但我认为,如果你是在围栏一般使用它更好。
https://stackoverflow.com/questions/59022597
复制相似问题