是否有任何重要的理由在开关案例中使用枚举的序数,而不是使用枚举?

问题描述 投票:1回答:2

我最近遇到了以下示例:

CommandKey key = command.getKey();
    switch(key.ordinal()) {
    case 1:
        return IncidentType.StatusChange;
    case 2:
        return IncidentType.Notification;
    ...

密钥是枚举的地方。

有没有理由为什么写这篇文章的人都是这样做的,因为这似乎会使代码变得不必要地变脆;对枚举列表值的更改可能会破坏映射逻辑并导致返回类型不正确。 我能看到的唯一可能的好处是轻微的性能提升,在具有高吞吐量的服务器环境中可以证明采用的方法是合理的。

是否有任何可能的性能提升,还有其他任何我不知道的好处吗?

java enums ordinal ordinals
2个回答
2
投票

反对它的理由很充分。这些序数可以随时改变而不会破坏二进制兼容性。这些名字根本无法改变。

更好的解决方案是将返回值构建到Enum本身。


2
投票

不,这不应该使用。最慈善的解释是有人盲目地用#defines从C或C ++中复制代码,但它应该是惯用的。

此外,在问题中概述的情况下(理解真实代码可能更复杂),最好用简单的EnumMap解决,这比任何分支都要高得多。

© www.soinside.com 2019 - 2024. All rights reserved.