A diferencia de Perl no existen conversiones automáticas de tipo, en el caso de que este se haya determinado. Es conveniente hacer una conversión explícita:
groovy:000> String a = 1; a = 4; a = a+1 ===> 41 groovy:000> String a = 1; a = 4; a = a*2 ===> 44 groovy:000> String a = 1; a = 4; a = a*3 ===> 444 groovy:000> String a = 2; b = a.toInteger(); b = b*2 ===> 4Si la cadena contiene un número y se hace coerción explícita también funciona. Pero si la cadena no contiene un número se produce una excepción:
groovy:000> b = "432" ===> 432 groovy:000> b.class ===> class java.lang.String groovy:000> c = b as Integer ===> 432 groovy:000> c.class ===> class java.lang.Integer groovy:000> d = "432b" ===> 432b groovy:000> e = d as Integer ERROR java.lang.NumberFormatException: For input string: "432b" at groovysh_evaluate.run (groovysh_evaluate:3) ...
Sin embargo, si que se produce coerción implícita entre tipos numéricos. Se llama coerción a la promoción de uno de los argumentos de un operador al tipo mas general:
groovy:000> a = 1+1.0 ===> 2.0 groovy:000> a.class ===> class java.math.BigDecimal
Podemos hacer la coerción explícita:
groovy:000> b = 1 as BigDecimal ===> 1 groovy:000> b.class ===> class java.math.BigDecimal
También funciona de número a String:
groovy:000> d = 65 ===> 65 groovy:000> d.class ===> class java.lang.Integer groovy:000> c = d as String ===> 65 groovy:000> c.class ===> class java.lang.String groovy:000> c ===> 65 groovy:000> c[1] ===> 5 groovy:000> e = 8.5 ===> 8.5 groovy:000> f = e as String ===> 8.5 groovy:000> f.class ===> class java.lang.String groovy:000> f[1] ===> . groovy:000> f[2] ===> 5En realidad, la conversión a String funcionará siempre que la clase disponga de un método
toString
.
En el siguiente ejemplo usamos una clase escrita por el usuario
en la que hemos implementado el método toString
:
groovy:000> import Complex ===> [import Complex] groovy:000> c = new Complex(4.5, 1.0) ===> 4.5 + i groovy:000> g = c as String ===> 4.5 + i groovy:000> g.class ===> class java.lang.String groovy:000> g[2] ===> 5
Casiano Rodríguez León