documentacion docs collections groovy

collections - docs - ¿Cómo registrar en Groovy ese objeto es una lista o colección o matriz?



grails 2.5 6 (5)

No sé si necesita distinguir entre Colección, Lista y Matriz, o simplemente desea saber si un objeto es alguno de estos tipos. Si esto último, puedes usar esto:

boolean isCollectionOrArray(object) { [Collection, Object[]].any { it.isAssignableFrom(object.getClass()) } } // some tests assert isCollectionOrArray([]) assert isCollectionOrArray([] as Set) assert isCollectionOrArray([].toArray()) assert !isCollectionOrArray("str")

Ejecute el código anterior en la consola de Groovy para confirmar que se comporta como se anuncia.

La pregunta es tan simple como el título. ¿Cómo registrar en Groovy ese objeto es una lista o colección o matriz? Pero no puedo encontrar una manera simple de verificarlo. ¿Algunas ideas?


Por lo general, querrás comprobar su comportamiento con el tipado de patos .

def foo = someMethod() if (foo.metaClass.respondsTo(''each'')) { foo.each {println it} }


Si estás buscando una forma Groovy, mira in operador. En realidad, es una combinación de Class.isAssignableFrom(Class<?>) Y Class.isInstance(Object) lo que significa que puede usarlo para probar clases y objetos.

// Test classes assert ArrayList in Collection assert ArrayList in List assert HashSet in Collection assert HashSet in Set // Test objects def list = [] as ArrayList def set = [] as HashSet assert list in Collection assert list in List assert set in Collection assert set in Set

Probar si un objeto es una matriz puede ser complicado. Recomendaría el enfoque de @ BurtBeckwith.

def array = [].toArray() assert array.getClass().isArray()


Solo use el operador instanceof y verifique si el objeto es una instancia de java.util.Collection


Una List es una Collection , por lo que los controles no son mutuamente exclusivos:

def foo = ... boolean isCollection = foo instanceof Collection boolean isList = foo instanceof List boolean isSet = foo instanceof Set boolean isArray = foo != null && foo.getClass().isArray()