是否允许空字符串作为Java中的枚举成员

时间:2012-04-16 18:44:56

标签: java ingres

我在使用一些遗留代码时遇到了一些问题。一张票要我写一个测试过程有效性的脚本;但是,当脚本运行时,我不断收到此异常:

 java.lang.IllegalArgumentException: No enum const class edu.cmu.s3.common.enums.RegistrationStatus.;

对于记录,正在使用的数据库是旧的Ingres遗留系统,因此空值表示为空字符串 - 非常漂亮,我必须添加。

无论如何,看起来每当遇到空字符串时,它就会在创建枚举时失败。我检查了枚举,但它包含了这个成员:

BLANK("", "Blank")

这会让我觉得空字符串确实是一个有效的参数,但它看起来并非如此。

CAN枚举使用空字符串作为参数,还是需要更新比我最初假设更多的遗留代码?

感谢您的帮助

2 个答案:

答案 0 :(得分:9)

空字符串是枚举构造函数的有效参数 - 但它不是有效的枚举名称

每个枚举值名称必须是有效的Java标识符。

答案 1 :(得分:1)

如果您使用Enum.valueOf(String)将数据库中的Strings解析为Enums,那么您的问题是valueOf名称的Enum个关键字本身,即BLANK

这对您有用:Enum.valueOf( "BLANK" )

但不是:Enum.valueOf( "" )

如果您想根据Enums构造函数中的其他字段解析Enum,则必须自己编写该代码。