Groovy 空值检查/返回

Posted

技术标签:

【中文标题】Groovy 空值检查/返回【英文标题】:Groovy null checking/returning 【发布时间】: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,因此这可能是我无法解决的问题。但我仍然想让逻辑尽可能简单,避免检查空值。

【问题讨论】:

【参考方案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"
    

【讨论】:

谢谢!这看起来更干净,可以完成工作!

以上是关于Groovy 空值检查/返回的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ColdFusion 查询循环中的返回值中检查空值

从预期返回非空值的方法返回 Null (UITableViewCell)

Groovy null 和 isEmpty 检查子集合

空值返回问题

空检查构造函数参数的Groovy方式

kotlin基础 空值检查