如何检查对象是否是Java中的集合类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (185)

通过使用java反射,我们可以很容易地知道对象是否是数组。告诉对象是否为集合(Set,List,Map,Vector ...)的最简单方法是什么?

提问于
用户回答回答于
if (x instanceof Collection<?>){
}

if (x instanceof Map<?,?>){
}
用户回答回答于

这里有两种可能的情况:

  1. 你正在确定一个object是否是一个集合;
  2. 你正在确定一个class是否是一个集合。

解决方案略有不同,但原理相同。您还需要定义完全构成“集合”的内容。实现CollectionMap将覆盖Java集合。

解决方案1:

public static boolean isCollection(Object ob) {
  return ob instanceof Collection || ob instanceof Map;
}

解决方案2:

public static boolean isClassCollection(Class c) {
  return Collection.class.isAssignableFrom(c) || Map.class.isAssignableFrom(c);
}

(1)也可以用(2)来实现:

public static boolean isCollection(Object ob) {
  return ob != null && isClassCollection(ob.getClass());
}

我不认为任何一种方法的效率都会大大不同。

扫码关注云+社区