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()