2012-04-16 6 views
3

いくつかのレガシーコードで少し問題があります。チケットはプロセスの妥当性をテストするスクリプトを書くことを私に要求します。私は、非常に美しい - レコードの空の文字列がJavaの列挙型メンバーとして許可されています

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

を、使用しているデータベースは古いのIngresレガシーシステムなので、NULL値は空の文字列として表現されている。しかし、私はスクリプトが実行されたときに、この例外を得続けます追加する必要があります。

とにかく、空の文字列が見つかるたびに、列挙型の作成に失敗したようです。でも、私は、列挙型をチェックし、それがこのメンバーが含まれています

BLANK("", "Blank") 

これは私が空の文字列が実際に有効な引数ですが、それがないように見えることを考えさせるでしょう。

CANのenumは空の文字列を引数として使用するか、最初に想定したよりも多くのレガシーコードを更新する必要がありますか?ヘルプ

+2

好奇心から、なぜNULLが空の文字列に等しいと思うのですか? –

+0

問題はコード自体にあり、stacktraceがあなたと一緒にいるかもしれません。 :) – biziclop

+1

私はそれが明らかな面倒な事件であると考えました。 :) – ryebr3ad

答えて

9

ため

おかげで、空の文字列には、列挙型のコンストラクタに有効な引数である - それは、有効な列挙名前ではありません。

すべてのenum値の名前は有効なJava識別子である必要があります。

+0

あなたはそうです。私はiBatisを使用してデータオブジェクトにデータを格納していますが、例外は問題のある属性と列挙型の間のマッピングを指していました。値が ''の場合は 'BLANK'を返すようにクエリを変更し、それ以外の場合は返され、問題が修正されました。 – ryebr3ad

1

あなたがEnumsにあなたのデータベースからStringsを解析するEnum.valueOf(String)を使用している場合は、あなたの問題はEnum名自体のオフそのvalueOfキー、すなわちBLANKです。

これはあなたのために働くだろう:Enum.valueOf("BLANK")

でもない:Enum.valueOf("")

あなたはEnumコンストラクタにpased他のいくつかのフィールドに基づいてEnumsを解析したい場合は、そのコードを自分で記述する必要があります。

関連する問題