Uso de cadenas estáticas en la declaración Groovy Switch-Case
Frecuentes
Visto 10,756 veces
3
Soy un programador de Java que está incursionando en Groovy. Notarás en mi código que mezclo alguna sintaxis específica de Java, que supuestamente está bien con Groovy.
¿Alguien puede explicarme por qué Groovy no acepta una variable estática como CASE
¿parámetro? O si es así, ¿puedes ver lo que estoy haciendo mal aquí?
public static final String HIGH_STRING = "high";
public static final String LOW_STRING = "low";
... //other code, method signature, etc.
def val = "high";
switch (val) {
case HIGH_STRING:
println("string was high"); //this won't match
break;
case LOW_STRING:
println("string was low"); //this won't match
break;
//case "high":
// println("string was high"); //this will match because "high" is a literal
// break;
default:
println("no match");
}
... //other code, method closeout, etc.
1 Respuestas
4
Sé que esto no responde a su pregunta de por qué su código no funciona para usted, pero si desea una forma un poco mejor/mejor de implementar su código, puede incluir sus valores en un mapa para que no tenga que usar a switch
declaración:
class ValueTests {
public static final String HIGH_STRING = "high"
public static final String LOW_STRING = "low"
@Test
void stuff() {
assert "string was high" == getValue("high")
assert "string was low" == getValue("low")
assert "no match" == getValue("higher")
}
def getValue(String key) {
def valuesMap = [
(HIGH_STRING): "string was high",
(LOW_STRING):"string was low"
]
valuesMap.get(key) ?: "no match"
}
}
Un poco más limpio que un switch
OMI.
contestado el 03 de mayo de 12 a las 16:05
esto no es exactamente lo que estaba buscando, pero verán en mi comentario anterior que fue mi propia culpa indiferente que esto no estaba funcionando. Sin embargo, el enfoque interesante que proporcionó aquí, y es lo más cercano que alguien publicó a una respuesta correcta, así que lo aceptaré. Me gusta aprender nuevas formas de abordar estas cosas, ¡así que gracias por tomarse el tiempo! - Marc
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas string groovy switch-statement case or haz tu propia pregunta.
Su caso de prueba funciona para mí. Por favor, publique una prueba completa donde falla. Además, ¿qué versión de Groovy estás usando? - ataylor
Ustedes tienen razón. Estoy trabajando en una aplicación de Grails y estoy haciendo esto
switch
en una clase de servicio. agregué elpublic static final
declaraciones mientras mi aplicación se estaba ejecutando, y Grails parecía estar actualizando las clases en consecuencia. Descubrí que no lo era (curiosamente, solo en esospublic static final
vars, ya que otros cambios de código estaban tomando). Hice un nuevo reinicio de mi aplicación, y ahora funciona. - Marc