2009-05-24 7 views
20

Co się dzieje, gdy przekazujesz pusty ciąg do wywołania Java .valueOf wywołania Java?Co się dzieje, gdy przekazujesz pusty ciąg do wywołania Java .valueOf w Java enum?

Na przykład:

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

a następnie

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

Zasadniczo, chcę wiedzieć, czy używam instrukcji switch z wyliczenia, będzie domyślny przypadek nazwać albo ja dostać jakiś wyjątek?

+3

Dlaczego nie wystarczy uruchomić kod lub przeczytać Javadocs? Wykonywanie kodu jest ostatecznym źródłem prawdy. Jeśli kod działa niewłaściwie, robi niewłaściwą rzecz i wymaga naprawy. –

+1

Pomyślałem, że może to być przydatne pytanie, które można przeszukać na SO. Dokumentacja dla tej konkretnej metody nie znajduje się w dokumentach java api, chociaż jest w specyfikacji języka. –

Odpowiedz

39

Powinieneś otrzymać IllegalArgumentException, jeśli nazwa nie jest nazwą enum (która nie będzie dla pustego łańcucha). Jest to generowane w dokumentach API dla wszystkich metod enum valueOf. Powinieneś uzyskać NullPointerException dla null. Prawdopodobnie nie jest dobrym pomysłem podanie wartości zmiennej String (ani dopuszczenia, aby ostatnia kropla nie spadła).

4

Po prostu wypróbowałem twój kod. Rzuca IllegalArgumentException. Tak jak mówi dokumentacja.

+0

Zabawnie, nie zdawałem sobie sprawy, że istnieje javadoc dla tej metody. http://java.sun.com/javase/6/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,%20java.lang.String) –

+4

@Jay: Nie, to jest inną metodą (zwróć uwagę, że wymaga dwóch argumentów). Wywoływana metoda jest określona bezpośrednio w specyfikacji języka Java, która również wspomina o wyjątku IllegalArgumentException: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#302265 – newacct

+0

Po co przydać się? –

2

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

więc to będzie flaga te wyjątki,

Powiązane problemy