2011-05-19 6 views
5

He usado enums en java en el pasado pero por alguna razón estoy obteniendo un error extraño en este momento. La línea de código que está lanzando el error es:enum valueOf IllegalArgumentException: No enum const class

switch(ConfigProperties.valueOf(line[0].toLowerCase()){ 
    ... 
} 

estoy recibiendo un

java.lang.IllegalArgumentException: No enum const class 
    allautomator.ConfigProperties.language 

en la línea de ejemplo es una matriz de cadenas.

Estoy realmente confundido en este momento, no sé lo que podría estar mal.

+2

y cómo se ve tu enum? – Bozho

+1

Por favor, publique su enumeración y el valor de la línea [0]. La función valueOf espera una cadena EXACTA. Sin espacios adicionales, puntuación, etc. No sé si es sensible a mayúsculas/minúsculas, pero lo asumiría por ahora. –

+0

¿Puedes agregar tu clase Enum y el contenido de la matriz lineal también? Solo para asegurarnos de que podamos ver cuáles son las entradas y qué enumeraciones tienes. –

Respuesta

16

Las constantes de enum distinguen entre mayúsculas y minúsculas, así que asegúrese de que las constantes son minúsculas. Además, sugeriría que trim() la entrada, así que asegúrese de que hay detrás del chivato líder/espacio en blanco allí:

ConfigProperties.valueOf(line[0].toLowerCase().trim()) 

Como referencia, aquí es un ejemplo de programa de trabajo que contiene la línea:

enum ConfigProperties { prop1, prop2 } 

class Test { 
    public static void main(String[] args) { 

     String[] line = { "prop1" }; 

     switch (ConfigProperties.valueOf(line[0].toLowerCase())) { 
     case prop1: System.out.println("Property 1"); break; 
     case prop2: System.out.println("Property 2"); break; 
     } 
    } 
} 

salida:

Property 1 
+0

Me aseguré de que el estuche esté en minúscula, pero el corte es lo que tenía que hacer. Gracias. –

+0

¡De nada! – aioobe

+1

@ajoobe estás llamando 'valueOf()' en un tipo de enumeración. Pero no veo este método en [javadocs] (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html). ¿Porque? La declaración del método parece 'public static > T valueOf (Clase enumType, String name)'. Aquí solo está pasando el segundo parámetro? ¿Que me estoy perdiendo aqui? – Geek

0

estoy utilizando un concepto similar, pero con un valor predeterminado en caso de fallar

public enum SortType { 

    PRICE_ASC("price_asc"), 
    PRICE_DESC("price_desc"), 
    MODEL_ASC("model_asc"), 
    MODEL_DESC("model_desc"); 

    private String name; 

    SortType(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    static public SortType lookup(String id, SortType defaultValue) { 
     try { 
      return SortType.valueOf(id); 
     } catch (IllegalArgumentException ex) { 
      return defaultValue; 
     } 
    } 
}