groovy缺失属性执行

groovy缺失属性执行,groovy,Groovy,我是groovy的新手。我想弄清楚基本的语法。以下代码段: def CRITICAL = 2; def MAJOR = 3; def MINOR = 9; def GetPriorityFromString(String priorityStr) { switch (priorityStr){ case "Critical" : return CRITICAL; case "Major" : return MAJOR; case "Mino

我是groovy的新手。我想弄清楚基本的语法。以下代码段:

def CRITICAL = 2;
def MAJOR = 3;
def MINOR = 9;
def GetPriorityFromString(String priorityStr) {
    switch (priorityStr){
        case "Critical" : return CRITICAL;
        case "Major" : return MAJOR;
        case "Minor" : return MINOR;
    }
    return 0;
}
GetPriorityFromString("Minor")
导致此错误的原因:

groovy.lang.MissingPropertyException: No such property: MINOR for class: Script21
我做错了什么

(由于我不熟悉这种语言,请随意建议任何将字符串转换为枚举值的“groovier”方法。)

只需使用映射即可

def mapping =["CRITICAL": 2, "MAJOR" : 3, "MINOR": 9]
println mapping["MINOR"]
至于您的原始代码: 变量的范围有问题。如果您在脚本上下文中,您可能不会使用“def”来声明全局变量,只需将其忽略即可

CRITICAL = 2;
MAJOR = 3;
MINOR = 9;
def GetPriorityFromString(String priorityStr) {
    switch (priorityStr){
        case "Critical" : return CRITICAL;
        case "Major" : return MAJOR;
        case "Minor" : return MINOR;
    }
    return 0;
}
GetPriorityFromString("Minor")
如果你把它放到一个普通的类中,那么你必须使用defs

class Test {
def CRITICAL = 2;
def MAJOR = 3;
def MINOR = 9;
def GetPriorityFromString(String priorityStr) {
    switch (priorityStr){
        case "Critical" : return CRITICAL;
        case "Major" : return MAJOR;
        case "Minor" : return MINOR;
    }
    return 0;
}
}
new Test().GetPriorityFromString("Minor")

把它放到真正的课堂上。