2009-08-14 21 views
8

In Groovy können Sie überraschende Typumwandlungen mit dem as Operator oder der asType Methode tun. Beispiele hierfür sindGroovy Typ Umwandlung

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

Ich bin überrascht, dass ich von einer Integer zu einem Kurz und von einem Satz zu einer Liste umwandeln kann, weil es keine Beziehung zwischen diesen Typen „a“, obwohl sie einem gemeinsamen tun teilen Vorfahr.

Zum Beispiel der folgende Code entspricht das Integer/Short Beispiel in Bezug auf die Beziehung zwischen den beteiligten Typen in der Umwandlung

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

def c = new Child1() as Child2 

Aber natürlich dieses Beispiel schlägt fehl. Was genau sind die Typumwandlungsregeln hinter dem as Operator und der asType Methode?

Antwort

5

Nach dem, was Ruben hat bereits das Endergebnis wies darauf hin:

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

ist

Set collection = new ArrayList(new HashSet()) 

Die asType Methode Sie eine List fehlen erkennt und ist die Tatsache, HashSet ist ein Collection, es verwendet nur ArrayList 's Konstruktor, der eine Collection nimmt.

Wie für die Nummer eins, wandelt es die Integer in eine Number, dann ruft die shortValue Methode.

Ich wusste nicht, dass es so viel Logik bei der Konvertierung von Referenzen/Werten wie dieser gibt, meine aufrichtige Dankbarkeit an Ruben für das Hinweis auf die Quelle, ich werde einige Blogbeiträge zu diesem Thema machen.