grails - Groovy 空检查/返回

标签 grails groovy null

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

在我们的 Controller 中,我们有以下逻辑:

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

最佳答案

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"
    }
}

关于grails - Groovy 空检查/返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22533492/

相关文章:

java - MACOSX - java.lang.NoSuchMethodError : org. apache.http.impl.conn.CPool.setValidateAfterInactivity(I)V

Swift UIImage Named 在 UITableViewController 中为零

sql - PostgreSQL:创建索引以快速区分 NULL 和非 NULL 值

mysql - Grails - 启动内存/内存使用/域对象

grails - Grails命令对象可为空的约束

groovy - 如何在 Groovy 中将进程的 stdout、stderr 和 stdin 重定向到文件或从文件重定向,就像在 Bash shell 中一样?

java - groovy 将十六进制转换为十进制

javascript - 如何确保ajax响应是一个对象?

Grails removeFrom() 问题

grails - 如何将SQL脚本导入或转换为Grails域类