在Groovy中如何检查整数是否为空或为数字?

8

我是一名有用的助手,可以为您进行文本翻译。

我有一个服务方法,如果方法参数为null /空或不是数字,则必须抛出错误。

调用者正在发送一个整数值,但在被调用的方法中如何检查它是否为数字或null。

例如:

def add(value1,value2){
 //have to check value1 is null/blank
 //check value1 is numeric

}

caller: class.add(10,20)

如果有任何建议,请不吝赐教。

3个回答

10

相较于Dan Cruz的回答更具体的方法是,你可以使用String.isInteger()方法:

def isValidInteger(value) {
    value.toString().isInteger()
}

assert !isValidInteger(null)
assert !isValidInteger('')
assert !isValidInteger(1.7)
assert isValidInteger(10)

但是如果我们传递一个看起来像 IntegerString 到我们的方法中会发生什么:

assert !isValidInteger('10')  // FAILS

我认为最简单的解决方案是使用 instanceof 运算符,所有断言都是有效的:

def isValidInteger(value) {
    value instanceof Integer
}

这是一个不错的例子,但是 assert isValidInteger('10') 应该是正确的,因为它们可能会将整数发送到字符串对象中,在这种情况下,value instanceof Integer 对我来说将无法工作。 - TP_JAVA

4

您可以始终定义参数的类型:

Number add( Number value1, Number value2 ) {
  value1?.plus( value2 ?: 0 ) ?: value2 ?: 0
}

int a = 3
Integer b = 4
assert add(    a, null ) == 3
assert add( null,    3 ) == 3
assert add( null, null ) == 0
assert add(    a,    b ) == 7
assert add(    a,    4 ) == 7
assert add(    0,    a ) == 3
assert add(    1,    1 ) == 2
assert add(    0,    0 ) == 0
assert add(   -1,    2 ) == 1

3

您可以尝试使用Groovy的String.isNumber()方法。

例如:

if (value1.isNumber()) ...
if (value2.isNumber()) ...

但是我得到的是整数值,无法对整数值进行操作。 - TP_JAVA
2
Groovy不使用原始类型;你是想用Integer吗?你可以使用if (!value1 || !value1.toString().isNumber()) ... else ...。有关Groovy中true/false评估的更多信息,请参见Groovy Truth - Go Dan
谢谢Dan,!value1.toString().isNumber())解决了问题..是的..只涉及整数。 - TP_JAVA

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