在 switch case 中使用枚举的序号而不是使用枚举有什么重要的理由吗?

Is there any significant reason to use the ordinal of an enum in a switch case, instead of using the enum?

我最近遇到了以下示例:

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

其中键是一个枚举。

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

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

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

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

反对 有充分的理由。序号可以随时更改,甚至不会破坏二进制兼容性。名字根本不能这么改。

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