我想在groovy中動態設置字段,所以我有一個從數據庫中獲取數據的java代碼,並且我使用java中的Bindings.setVariable()
設置了groovy字段。Groovy投原語類型
我想知道是否有可能在groovy中投入每個基本類型。 String
至int
,String
至float
等等。 所以我總是可以發送一個字符串並在其他原始時間投射,這取決於我的groovy字段的類型。
我想在groovy中動態設置字段,所以我有一個從數據庫中獲取數據的java代碼,並且我使用java中的Bindings.setVariable()
設置了groovy字段。Groovy投原語類型
我想知道是否有可能在groovy中投入每個基本類型。 String
至int
,String
至float
等等。 所以我總是可以發送一個字符串並在其他原始時間投射,這取決於我的groovy字段的類型。
這取決於你究竟需要的,但下面這段代碼工作得很好:
assert '2' as Integer == 2
assert '2.2' as Double == 2.2
@歐泊的as
解決方案是好的,但我也想提一提的是,Groovy的JDK增加了一些方便的基本檢查和轉換的方法來CharSequence,其中字符串實現:
isDouble
和asDobule
isFloat
和asFloat
asLong
isInteger
和asInteger
有趣的是,它isFloat
似乎是貪婪的,返回true
浮動點超出其範圍。
['2', '2.2', '2' * 10, "${Double.MAX_VALUE}"].each { s ->
switch (s) {
case { it.isInteger() }:
int i = s.toInteger()
println "String '$s' -> int $i"
break
case { it.isLong() }:
long l = s.toLong()
println "String '$s' -> long $l"
break
case { it.isFloat() }:
float f = s.toFloat()
println "String '$s' -> float $f"
break
case { it.isDouble() }:
double d = s.toDouble()
println "String '$s' -> double $d"
break
default:
println "$s is not a supported primitive"
}
}
打印出
String '2' -> int 2
String '2.2' -> float 2.2
String '2222222222' -> long 2222222222
String '1.7976931348623157E308' -> float Infinity
太好了,謝謝! – Opal
我會使用'switch(s.toString())'在更安全的一面,因爲'*()'只適用於'String'。偶然在上面的列表中有一個「數字」或「空」會使檢查失敗。 – dmahapatro
這正是我想要感謝 –
@SteevenBrunner,如果這就是你所需要的,請接受的答案。 – Opal