工作的Java 7+警告....假设我们创建一个枚举:生成编译器enum.ordinal
enum Foo{ FOO, BAR }
然后Foo.FOO.ordinal() == 0
。但是,如果我重新排列枚举,请说:
enum Foo{ BAR, FOO }
then Foo.FOO.ordinal() == 1
。这对于大多数人来说是令人惊讶的,因为他们觉得重新排序字段是一个“安全”的操作。毫不奇怪,在大多数情况下,Java推荐与使用enum.ordinal()
。有很多替代方法,最明显的是(和自我证明)将每个枚举值与一个int相关联。
不幸的是,我公司的一些人没有得到备忘录,我们很多旧代码都使用了遍布整个地方的.ordinal()
方法,这取决于int和枚举值之间关联的基本方法。当我有时间时,我会经历并重构,但它不会阻止使用.ordinal()
的新代码,这会引入潜在的无法跟踪的错误。
所以!假设我有一个与它关联的很多结构的枚举。我可以以某种方式将.ordinal()
标记为不安全,这样如果有人使用(比如说)Foo.FOO.ordinal()
会生成编译器警告?
我很满意为此目的使用外部软件包,但如果它们不太模糊,会更喜欢它。
我从来没有这样做,所以把它当作一粒盐;但我会研究像PMD这样的质量工具并编写自定义规则。 – Henry
你的设置是什么?你有一些CI环境吗?例如,我们通过某种Maven插件规则集来阻止从guice中使用@ Inject-Annotation。你想在IDE或git提交钩子或CI系统中发出警告吗? – luk2302
太糟糕了,它是'final',否则你可以覆盖该方法并将其弃用。 – shmosel