2012-05-07 22 views
2

我有一個服務方法,並且如果方法參數爲空/空或不是數字,則必須拋出錯誤。檢查整數在常規中是否爲空或數字?

調用者發送一個整數值,但在調用的方法如何檢查它是數字還是空值。

例如:

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

} 

caller: class.add(10,20) 

任何建議各地將不勝感激。

回答

1

您可以嘗試使用Groovy的String.isNumber()方法。

例如:

if (value1.isNumber()) ... 
if (value2.isNumber()) ... 
+0

,但我發現int值,我不能在int值上做。 –

+2

Groovy不使用原始類型;你是不是指'整數'?你可以使用'if(!value1 ||!value1.toString()。isNumber())... else ...'。有關Groovy中「true」/「false」評估的更多信息,請參閱[Groovy Truth](http://docs.codehaus.org/display/GROOVY/Groovy+Truth)。 –

+0

感謝Dan,!value1.toString()。isNumber())做了這個訣竅..只是指的是Integer。 –

7

更具體的是,answer of Dan Cruz,您可以使用String.isInteger()方法:

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

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

但是,如果我們傳遞一個String,看起來像一個Integer我們的方法發生了:

assert !isValidInteger('10') // FAILS 

我認爲,最簡單的辦法就是使用instanceof運營商,所有的斷言是有效的:

def isValidInteger(value) { 
    value instanceof Integer 
} 
+0

它的很好的例子,但斷言isValidInteger('10')應該是正確的,b'z他們可能發送Integer在字符串對象,在這種情況下,價值instanceof整數將不適用於我。 –

3

你總是可以定義參數的類型:

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