我最近遇到了以下示例:
CommandKey key = command.getKey();
switch(key.ordinal()) {
case 1:
return IncidentType.StatusChange;
case 2:
return IncidentType.Notification;
...
密钥是枚举的地方。
有没有理由为什么写这篇文章的人都是这样做的,因为这似乎会使代码变得不必要地变脆;对枚举列表值的更改可能会破坏映射逻辑并导致返回类型不正确。 我能看到的唯一可能的好处是轻微的性能提升,在具有高吞吐量的服务器环境中可以证明采用的方法是合理的。
是否有任何可能的性能提升,还有其他任何我不知道的好处吗?
反对它的理由很充分。这些序数可以随时改变而不会破坏二进制兼容性。这些名字根本无法改变。
更好的解决方案是将返回值构建到Enum
本身。
不,这不应该使用。最慈善的解释是有人盲目地用#define
s从C或C ++中复制代码,但它应该是惯用的。
此外,在问题中概述的情况下(理解真实代码可能更复杂),最好用简单的EnumMap
解决,这比任何分支都要高得多。