2009-08-14 26 views
8

En Groovy puede hacer conversiones de tipo sorprendente utilizando el operador as o el método asType. Los ejemplos incluyenConversión de tipo Groovy

Short s = new Integer(6) as Short 
List collection = new HashSet().asType(List) 

Me sorprende que pueda convertir de un entero en un corto y de un conjunto a una lista, porque no hay "una" relación entre estos tipos, a pesar de que comparten un común antepasado.

Por ejemplo, el siguiente código es equivalente al ejemplo de enteros/corto en términos de la relación entre los tipos implicados en la conversión

class Parent {} 
class Child1 extends Parent {} 
class Child2 extends Parent {} 

def c = new Child1() as Child2 

Pero, por supuesto, este ejemplo no. ¿Cuáles son exactamente las reglas de conversión de tipo detrás del operador as y el método asType?

Respuesta

5

De acuerdo con lo Ruben ya ha señalado el resultado final de:

Set collection = new HashSet().asType(List) 

es

Set collection = new ArrayList(new HashSet()) 

El método asType reconoce estás interesado en un List y ser el hecho de HashSet es una Collection, simplemente usa el constructor ArrayList que toma un Collection.

En cuanto a los números uno, convierte el Integer en un Number, luego llama al método shortValue.

No me di cuenta que había tanta lógica en la conversión de referencias/valores como este, mi más sincera gratitud a Ruben por señalar la fuente, estaré haciendo bastantes publicaciones en el blog sobre este tema.

Cuestiones relacionadas