2012-04-16 51 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,你就必須自己編寫的代碼。