2009-05-24 10 views
20

Que se passe-t-il lorsque vous transmettez une chaîne vide à un appel Java enum .valueOf?Que se passe-t-il lorsque vous passez une chaîne vide à un appel .valueOf Java enum?

Par exemple:

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

puis

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

Fondamentalement, je veux savoir si j'utilise une instruction switch avec l'ENUM, sera le cas par défaut appelé ou serais-je obtenir une exception quelconque?

+3

Pourquoi vous ne lancez simplement le code ou lire les javadocs? L'exécution du code est la source ultime de la vérité. Si le code fait la mauvaise chose, il fait la mauvaise chose et doit être corrigé. –

+1

Je pensais que ce pourrait être une question utile qui pourrait être recherchée sur SO. La documentation pour cette méthode particulière n'est pas dans les docs java api, bien que ce soit dans la spécification lang. –

Répondre

39

Vous devriez obtenir un IllegalArgumentException si le nom n'est pas celui d'une énumération (ce qui ne sera pas le cas pour la chaîne vide). Ceci est généré dans les documents API pour toutes les méthodes enum valueOf. Vous devriez obtenir un NullPointerException pour null. Ce n'est probablement pas une bonne idée de donner une valeur fictive à votre variable String (ni de laisser passer la dernière case/default).

4

J'ai juste essayé votre code. Il jette un IllegalArgumentException. Tout comme la documentation dit.

+0

Curieusement, je n'ai pas réalisé qu'il y avait javadoc pour cette méthode. http://java.sun.com/javase/6/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,%20java.lang.String) –

+4

@Jay: Non, c'est un méthode différente (notez comment cela prend deux arguments). La méthode que vous avez appelée est spécifiée directement dans la spécification de langage Java, qui mentionne également l'exception IllegalArgumentException: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#302265 – newacct

+0

Pourquoi le downvote? –

2

méthode: 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** 

il signaleront ces exceptions,

Questions connexes