43 Stimmen

Was passiert, wenn Sie einen ungültigen String an einen Java enum .valueOf-Aufruf übergeben?

Was passiert, wenn Sie eine leere String (oder einen anderen nicht erkannten Wert, oder einen null ) in eine Java-Enum .valueOf anrufen?

Zum Beispiel:

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

und dann

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");
   }
}

Grundsätzlich möchte ich wissen, wenn ich eine Switch-Anweisung mit der Aufzählung verwende, wird der Standardfall aufgerufen oder erhalte ich eine Ausnahme von einer Art?

60voto

Tom Hawtin - tackline Punkte 142461

Sie sollten eine IllegalArgumentException wenn der Name nicht der einer Aufzählung ist (was bei einer leeren Zeichenkette nicht der Fall ist). Dies wird in den API-Dokumenten für alle enum generiert valueOf Methoden. Sie sollten eine NullPointerException para null . Es ist wahrscheinlich keine gute Idee, einen Dummy-Wert für Ihre String Variable (und auch nicht, dass die letzte case / default durchfallen).

9voto

Etienne de Martel Punkte 32132

Ich habe gerade Ihren Code ausprobiert. Er wirft ein IllegalArgumentException . Genau wie es in der Dokumentation steht.

5voto

sazamsk Punkte 177

Methode: 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**

damit diese Ausnahmen gekennzeichnet werden,

3voto

Peter Lawrey Punkte 511323

Status.valueOf verhält sich genauso wie Enum.valueOf

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X