2016-01-22 61 views
0

我想在groovy中動態設置字段,所以我有一個從數據庫中獲取數據的java代碼,並且我使用java中的Bindings.setVariable()設置了groovy字段。Groovy投原語類型

我想知道是否有可能在groovy中投入每個基本類型。 StringintStringfloat等等。 所以我總是可以發送一個字符串並在其他原始時間投射,這取決於我的groovy字段的類型。

回答

2

這取決於你究竟需要的,但下面這段代碼工作得很好:

assert '2' as Integer == 2 
assert '2.2' as Double == 2.2 
+0

這正是我想要感謝 –

+0

@SteevenBrunner,如果這就是你所需要的,請接受的答案。 – Opal

3

@歐泊的as解決方案是好的,但我也想提一提的是,Groovy的JDK增加了一些方便的基本檢查和轉換的方法來CharSequence,其中字符串實現:

  • isDoubleasDobule
  • isFloatasFloat
  • asLong
  • isIntegerasInteger

有趣的是,它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 
+0

太好了,謝謝! – Opal

+0

我會使用'switch(s.toString())'在更安全的一面,因爲'*()'只適用於'String'。偶然在上面的列表中有一個「數字」或「空」會使檢查失敗。 – dmahapatro