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

时间:2018-02-28 09:54:51

标签: java enums ordinal ordinals

我最近遇到了以下示例:

SELECT A, B, C, D, CASE WHEN D IS NULL OR D='' THEN 'i-1' ELSE '' END AS E
FROM YourTable

密钥是枚举的地方。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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