Groovy 空值检查/返回

3

如果我说了些愚蠢的话,因为我对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
}

这里有一些问题,包括返回空值和检查空值,我希望能够解决。我可以尝试:

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,所以这可能是我无法修复的问题。但我仍然希望使逻辑尽可能简单,并避免检查null。

1个回答

4

我不确定你需要什么,但另一个选择可能是尝试使用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"
    }
}

谢谢!这看起来更清晰,而且完成得很好! - janDro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接