Groovy de conversion de type
En Groovy, vous pouvez le faire surprenant conversions de type en utilisant soit le as
de l'opérateur ou de la asType
méthode. Les exemples incluent
Short s = new Integer(6) as Short
List collection = new HashSet().asType(List)
Je suis surpris de voir que je peux convertir un Entier Court et à partir d'un Ensemble à une Liste, car il n'est pas "est" une relation entre ces types, bien qu'ils partagent un ancêtre commun.
Par exemple, le code suivant est équivalent à l'Entier/Court exemple, en matière de
relation entre les types impliqués dans la conversion
class Parent {}
class Child1 extends Parent {}
class Child2 extends Parent {}
def c = new Child1() as Child2
Mais bien entendu, cet exemple échoue. Quels sont exactement le type de règles de conversion derrière la as
de l'opérateur et de la asType
méthode?
OriginalL'auteur Dónal | 2009-08-14
Vous devez vous connecter pour publier un commentaire.
Je crois que le défaut
asType
comportement peut être trouvée dans: org.codehaus.groovy.runtime.DefaultGroovyMethods.javaorg.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.java.
À partir de
DefaultGroovyMethods
il est assez facile de suivre le comportement deasType
pour un type d'objet spécifique et a demandé le type de combinaison.OriginalL'auteur Ruben
Selon ce que Ruben a déjà souligné le résultat final de:
est
La
asType
méthode tient compte de la vous êtes désireux d'unList
et le faitHashSet
est unCollection
, il utilise justeArrayList
'constructeur qui prend unCollection
.Comme pour les nombres, il convertit le
Integer
dans unNumber
, puis appelle lashortValue
méthode.Je ne le savais pas, il y avait beaucoup de logique dans la conversion de références et des valeurs de ce type, ma sincère gratitude à Ruben pour désigner la source, je vais faire tout à fait quelques articles de blog sur ce sujet.
OriginalL'auteur Chad Gorshing