首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Groovy中检查对象是列表、集合还是数组?

如何在Groovy中检查对象是列表、集合还是数组?
EN

Stack Overflow用户
提问于 2011-09-02 02:57:54
回答 5查看 50.3K关注 0票数 39

问题就像标题一样简单。如何在Groovy中检查对象是列表、集合还是数组?但是找不到一种简单的方法来检查它。有什么想法吗?

EN

回答 5

Stack Overflow用户

发布于 2011-09-02 03:08:51

List是一个Collection,所以检查并不是互斥的:

代码语言:javascript
运行
复制
def foo = ...
boolean isCollection = foo instanceof Collection
boolean isList = foo instanceof List
boolean isSet = foo instanceof Set
boolean isArray = foo != null && foo.getClass().isArray()
票数 43
EN

Stack Overflow用户

发布于 2016-04-05 01:43:37

如果您正在寻找一种Groovy方式,请查看in operator。它实际上是Class.isAssignableFrom(Class<?>)Class.isInstance(Object)的组合,这意味着您可以使用它来测试类和对象。

代码语言:javascript
运行
复制
// 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的方法。

代码语言:javascript
运行
复制
def array = [].toArray()

assert array.getClass().isArray()
票数 7
EN

Stack Overflow用户

发布于 2019-04-01 19:05:21

我用它来“数组”一个对象,如果它已经是一个集合,那么它将返回一个副本,否则将它包装在一个列表中。所以你不需要在处理的时候检查它,它永远是一个集合。

代码语言:javascript
运行
复制
def arrayfy = {[] + it ?: [it]}
def list = arrayfy(object) // will be always a list
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7275091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档