In Groovy è possibile eseguire conversioni di tipo sorprendenti utilizzando l'operatore as
o il metodo asType
. Gli esempi includonoConversione tipo Groovy
Short s = new Integer(6) as Short
List collection = new HashSet().asType(List)
Sono sorpreso che posso convertire da un intero in una breve e da un set a una lista, perché non c'è "è una" relazione tra questi tipi, anche se condividono una comune antenato.
Ad esempio, il codice seguente è equivalente al/example intero breve in termini di relazione tra i tipi coinvolti nella conversione
class Parent {}
class Child1 extends Parent {}
class Child2 extends Parent {}
def c = new Child1() as Child2
Ma naturalmente questo esempio non riesce. Quali sono esattamente le regole di conversione del tipo dietro l'operatore as
e il metodo asType
?