如何在groovy中允许0作为参数?

时间:2018-04-11 22:03:41

标签: groovy

以下是我正在尝试运行的代码。这是我服务的一部分,该方法是从控制器调用的。现在,我想允许所有整数值> = 0并避免空值(当控制器仅传递a或b的值时可能会出现这种情况。)

int x = 10
int y = 10
boolean doSomething(int a, int b) {
    String logger = ""
    if(a >= 0 || a != null) {
        x = a
        logger += "Value of x is ${x}. "
    }
    if(b >= 0 || b != null) {
        y = b
        logger += "Value of y is ${y}. "
    }
    if(logger) {
        log.info logger
        return true
    }
    log.error "values not found"
    return false
}

我想知道在groovy中是否有办法做到这一点。我一直面临的问题是,当只传递1个值时,另一个值会更新为0,这是我不想要的。

2 个答案:

答案 0 :(得分:2)

int x = 10
int y = 10
boolean doSomething(Integer a, Integer b) {
    String logger = ""
    if(a >= 0) {
        x = a
        logger += "Value of x is ${x}. "
    }
    if(b >= 0) {
        y = b
        logger += "Value of y is ${y}. "
    }
    if(logger) {
        log.info logger
        return true
    }
    log.error "values not found"
    return false
}

这是基于@ Daniel建议的最后一段代码。这里,只接受值> = 0。此外,将忽略空值。

答案 1 :(得分:1)

你只需要将0与0分开;不要依赖于时髦的事实。

if (a != null && b != null && a >= 0 && b >= 0) {
    println "OK"
} else {
    println "Bad arguments"
}

根据您的问题编辑和后续评论进行编辑:

  • 你的逻辑有点偏;将您的" ||" s更改为"&&" s。你想要'a> = 0和a不是空"
  • 将输入类型更改为Integer,以便它们实际上可以为null
  • 如果这两件事无法解决您的问题,请说明如何为行动找到参数。