【问题标题】:Groovy null checking/returningGroovy 空值检查/返回
【发布时间】:2014-04-27 07:53:37
【问题描述】:

我对 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,因此这可能是我无法解决的问题。但我仍然想让逻辑尽可能简单,避免检查空值。

【问题讨论】:

    标签: grails groovy null


    【解决方案1】:

    不确定 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"
        }
    }
    

    【讨论】:

    • 谢谢!这看起来更干净,可以完成工作!
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2019-03-14
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多