1

我最近遇到了以下示例:

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

关键是枚举。

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

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

4

2 回答 2

2

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

此外,在问题中概述的情况下(了解实际代码可能更复杂),最好使用简单的 来解决EnumMap,这将比任何分支都具有更高的性能。

于 2018-02-28T09:58:07.747 回答
2

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

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

于 2018-02-28T10:05:18.323 回答