2012-04-16 65 views
3

我对某些遗留代码有点问题。票证要求我写一个测试流程有效性的脚本;不过,我不断收到当脚本运行此异常:是否允许空字符串作为Java中的枚举成员

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

为了记录在案,所使用的数据库是一个古老的安格尔的遗留系统,所以空值被表示为空字符串 - 蛮漂亮的,我必须添加。

无论如何,它看起来像遇到一个空字符串时,它在创建枚举时失败。我查了枚举,但是,它包含成员:​​

BLANK("", "Blank") 

这使我想到一个空字符串确实是一个有效的参数,但它看起来像它不是。

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

感谢您的帮助

+2

出于好奇,你为什么认为'NULL等于空字符串是美丽的? – 2012-04-16 18:47:12

+0

问题将出现在代码本身中,可能是堆栈跟踪。 :) – biziclop 2012-04-16 18:48:40

+1

我觉得这是一个显而易见的情况。 :) – ryebr3ad 2012-04-16 18:51:06

回答

9

空字符串是一个枚举构造有效说法 - 但它不是一个有效的枚举

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

+0

你说得对。我使用iBatis来填充数据对象,而异常则涉及违规属性和枚举之间的映射。如果值为'',我将查询更改为返回'BLANK',否则返回给定的内容,并解决问题。 – ryebr3ad 2012-04-16 21:06:13

1

如果您使用Enum.valueOf(String)从数据库解析StringsEnums,那么你的问题是valueOf键关闭Enum名称本身,即BLANK的。

这会为你工作:Enum.valueOf("BLANK")

但不是:Enum.valueOf("")

如果你想基于pased到Enum构造其他一些领域来分析Enums,你就必须自己编写的代码。