Groovy null检查/返回

时间:2014-03-20 12:45:51

标签: grails groovy null

我对groovy很新,所以如果我说些蠢话,我会提前道歉,但我想找到一种更有效的方法来做到这一点。

在我们的控制器中,我们有以下逻辑:

def getExampleInstance() {
    if(params.id?.toString()?.isNumber()){
        return Examplet.get(params.id)
    }
    else if(params.id != null){
        return params.id.toLowerCase() == 'key' ? Example.findByIdIsNotNull() : Example.findByattributeIlike(params.id)
    }
    return null
}

这有几个问题,包括返回null和检查null,我想摆脱它。我可以试试:

def getExampleInstance() {
    if(params.id?.toString()?.isNumber()){
        return Example.get(params.id)
    }
    else if(params.id?.toLowerCase() == 'key'){
        return Example.findByIdIsNotNull()
    }
    //more logic here
    return null
}

然后我最终会得到一个更复杂的逻辑,并且可能仍然检查/返回null以便在结尾处实现findByIlike。

此方法的合同允许返回null,因此这可能是我无法解决的问题。但我仍然希望尽可能简化逻辑并避免检查空值。

1 个答案:

答案 0 :(得分:2)

不确定100%你之后会怎样,但另一种方法是尝试使用Groovy switch语句?

def getExampleInstance() {
    switch( params.id ) {
        // Is it an integer, or a string representation of an integer?
        case Integer:
        case ~/[0-9]+/:
            return Example.get( "$params.id".toInteger() )

        // Is it the word "key"?
        case 'key':
            return Example.findByIdIsNotNull()

        // Is it null?
        case null:
            println "params.id was null"
            break

        // Otherwise, it's something else
        default:
            println "No idea how to handle $params.id"
    }
}