问题就像标题一样简单。如何在Groovy中检查对象是列表、集合还是数组?但是找不到一种简单的方法来检查它。有什么想法吗?
发布于 2011-09-02 03:08:51
List
是一个Collection
,所以检查并不是互斥的:
def foo = ...
boolean isCollection = foo instanceof Collection
boolean isList = foo instanceof List
boolean isSet = foo instanceof Set
boolean isArray = foo != null && foo.getClass().isArray()
发布于 2016-04-05 01:43:37
如果您正在寻找一种Groovy方式,请查看in
operator。它实际上是Class.isAssignableFrom(Class<?>)
和Class.isInstance(Object)
的组合,这意味着您可以使用它来测试类和对象。
// 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
测试一个对象是否是一个数组可能很棘手。我推荐@BurtBeckwith的方法。
def array = [].toArray()
assert array.getClass().isArray()
发布于 2019-04-01 19:05:21
我用它来“数组”一个对象,如果它已经是一个集合,那么它将返回一个副本,否则将它包装在一个列表中。所以你不需要在处理的时候检查它,它永远是一个集合。
def arrayfy = {[] + it ?: [it]}
def list = arrayfy(object) // will be always a list
https://stackoverflow.com/questions/7275091
复制相似问题