有没有办法创建一个不能为null的枚举?

时间:2011-10-11 17:55:46

标签: java enums

我一直在我的项目中发现了一些错误,这些错误是由于枚举为null而不是枚举值之一。有没有办法保证这个类型的变量总是用其中一个枚举值初始化,永远不会为null?

2 个答案:

答案 0 :(得分:4)

没有。枚举始终是引用类型,null是任何引用类型的有效值。您可以始终写:

MyEnum x = null;

如果你有一个未明确初始化的实例或静态变量,它将始终默认为null。

答案 1 :(得分:1)

这可能是通过选择Java Design By Contract系统并更改枚举中的每个函数来要求它不为空来完成(非常非常痛苦)。当然,这对现有项目来说是一项巨大的工作量。

在更实际的说明中,您可以考虑将static code analysis tool集成到构建过程中。这也是一项大量工作(它可能会发现一大堆“错误”),但如果你有时间投资它,可能是可行的(仍然很痛苦)。正确的静态代码分析工具可能会检测到这种错误。