Groovy Typ-Konvertierung
In Groovy können Sie tun, überraschend Typ-Konvertierungen unter Verwendung entweder der as
Betreiber oder die asType
Methode. Beispiele sind
Short s = new Integer(6) as Short
List collection = new HashSet().asType(List)
Ich bin überrascht, dass ich konvertieren von einem Integer in einen Kurzen und aus einem Set, um eine Liste, weil es keine "ist ein" - Beziehung zwischen diesen beiden Typen, obwohl Sie einen gemeinsamen Vorfahren haben.
Beispielsweise der folgende code ist äquivalent zu Integer/Short Beispiel in Bezug auf die
Beziehung zwischen den Arten beteiligt bei der Umwandlung
class Parent {}
class Child1 extends Parent {}
class Child2 extends Parent {}
def c = new Child1() as Child2
Aber natürlich ist dieses Beispiel nicht. Was genau sind die Typ-Konvertierung Regeln hinter der as
Betreiber und die asType
Methode?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube ich, dass die Standard -
asType
Verhalten können gefunden werden in: org.codehaus.groovy.runtime.DefaultGroovyMethods.javaorg.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.java.
Ab
DefaultGroovyMethods
es ist ganz einfach, Folgen Sie das Verhalten vonasType
für einen bestimmten Objekttyp und angeforderten Typ-Kombination.Laut, was Ruben hat schon darauf hingewiesen, die Ende Ergebnis:
ist
Den
asType
Methode erkennt, Sie werden wollen, einList
und die TatsacheHashSet
ist einCollection
es nur verwendetArrayList
's Konstruktor nimmt eineCollection
.Als für die zahlen eins, es wandelt die
Integer
in eineNumber
, dann fordert dershortValue
Methode.Ich wusste nicht, es war so viel Logik in der Umwandlung von Referenzen/Werte wie diese, meinen aufrichtigen Dank an Ruben für den Hinweis auf die Quelle, werde ich schon ein paar blog-Beiträge über dieses Thema.