And*_*ich 32 collections groovy
问题就像标题一样简单.如何在Groovy中检查该对象是列表或集合或数组?但找不到一种简单的检查方法.有任何想法吗?
Bur*_*ith 36
A List是a 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()
Run Code Online (Sandbox Code Playgroud)
Dón*_*nal 30
我不知道你是否需要区分Collection,List和Array,或者只是想知道一个对象是否是这些类型中的任何一个.如果是后者,你可以使用这个:
boolean isCollectionOrArray(object) {
[Collection, Object[]].any { it.isAssignableFrom(object.getClass()) }
}
// some tests
assert isCollectionOrArray([])
assert isCollectionOrArray([] as Set)
assert isCollectionOrArray([].toArray())
assert !isCollectionOrArray("str")
Run Code Online (Sandbox Code Playgroud)
在Groovy控制台中运行上面的代码,以确认它的行为与广告一样
如果您正在寻找 Groovy 方式,请查看in运算符。它实际上是一个组合,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
Run Code Online (Sandbox Code Playgroud)
测试对象是否是数组可能很棘手。我会推荐@BurtBeckwith 的方法。
def array = [].toArray()
assert array.getClass().isArray()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39362 次 |
| 最近记录: |