Using Static String in Groovy Switch-Case Statement

case, groovy, string, switch-statement

Solution

I know this doesn't answer your question of why your code is not working for you, but if you want a slightly groovier/better way to implement your code you could throw your values into a map so then you wouldn't have to use a `switch` statement:

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

}

A little cleaner than a `switch` IMO.

Problem

I'm a Java programmer who's dabbling in Groovy. You'll note in my code that I mix in some Java-specific syntax, which is supposedly A-Okay with Groovy. Can anyone explain to me why Groovy won't accept a static variable as a `CASE` parameter? Or if it will, can you see what I'm doing wrong here? ``` 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. ```

Original source