web-dev-qa-db-ja.com

空の文字列をJava enum .valueOf呼び出しに渡すとどうなりますか?

空の文字列をJava enum .valueOf呼び出しに渡すとどうなりますか?

例えば:

public enum Status
{
   STARTED,
   PROGRESS,
   MESSAGE,
   DONE;
}

その後

String empty = "";

switch(Status.valueOf(empty))
{
   case STARTED:
   case PROGRESS:
   case MESSAGE:
   case DONE:
   {
      System.out.println("is valid status");
      break;
   }
   default:
   {
      System.out.println("is not valid");
   }
}

基本的に、enumでswitchステートメントを使用しているかどうかを知りたいのですが、デフォルトのケースが呼び出されますか、それとも何らかの例外が発生しますか?

27
Jay R.

名前が列挙型(空の文字列ではない)の名前でない場合は、IllegalArgumentExceptionを取得する必要があります。これは、すべての列挙valueOfメソッドのAPIドキュメントで生成されます。 NullPointerExceptionnullを取得する必要があります。 String変数にダミーの値を与えることはおそらくお勧めできません(最後のcase/defaultを通過させることもできません)。

49

私はあなたのコードを試しました。 IllegalArgumentExceptionをスローします。ドキュメントが言うように。

7

メソッド:valueOf

Returns the enum constant of the specified enum type with the specified name. The name must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Parameters:
    enumType - the Class object of the enum type from which to return a constant
    name - the name of the constant to return 
Returns:
    the enum constant of the specified enum type with the specified name 
Throws:
    IllegalArgumentException - if the specified enum type has no constant with the specified name, or **the specified class object does not represent an enum type** 
    NullPointerException - if **enumType or name is null**

これらの例外にフラグを立てます

3
sazamsk

Status.valueOfは Enum.valueOf と同じように動作します

2
Peter Lawrey