Groovy Cast原始类型

时间:2016-01-22 14:20:28

标签: groovy casting primitive

我想在groovy中动态设置字段,所以我有一个从数据库中获取数据的java代码,我在java中使用Bindings.setVariable()设置了groovy字段。

我想知道是否可以在groovy中转换每个基元类型。 StringintStringfloat,依此类推。 所以我总是可以发送一个字符串并在其他原始时间进行投射,这取决于我的常规字段的类型。

2 个答案:

答案 0 :(得分:3)

@Opal的as解决方案很好,但我还想提一下Groovy JDK为CharSequence添加一些方便的原始检查和转换方法,String实现:

  • isDoubleasDobule
  • isFloatasFloat
  • isLongasLong
  • 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

答案 1 :(得分:2)

这取决于你究竟需要什么,但下面的一段代码效果很好:

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