如何知道java对象是否是List

时间:2014-03-31 17:51:07

标签: java list instanceof

我想知道如何询问java对象是List还是ArrayList。

例如:

if (Object instanceof List <?>)) {
    // Do something
}

PS:我有几个不同类型的列表,并希望为任何列表实现该方法,无论它们包含哪种类型的数据。

2 个答案:

答案 0 :(得分:3)

要测试某个实例是List还是ArrayList 1 ,只需使用instanceof

请注意,根据JLS 15.20.2instanceof运算符的类型操作数必须是可重新生成的类型,并且在JLS 4.7中定义为:

  • 参数化类型,其中所有类型参数都是无界通配符,
  • 原始类型
  • 原始类型(在此上下文中不适用
  • 一种数组类型,其元素类型是可再生的,或
  • 一个嵌套类型,其中每个封闭类型也是可以恢复的。

所以这两个都应该有效:

if (obj instanceof List)) {     // raw type
    // Do something
}
if (obj instanceof List <?>)) { // type parameter is an unbounded wildcard
    // Do something
}

但这将是一个编译错误:

if (obj instanceof List <Integer>)) {
    // Do something
}

  

我有几个不同类型的列表,并希望为任何列表实现该方法,无论它们包含哪种类型的数据。

那没问题。

(但如果你希望这个方法只适用于具有某种数据类型的列表......基于一个简单的运行时类型检查,这将是一个问题。泛型类型的类型参数在运行时不可用于运行时测试,所以你需要单独测试列表中的每个元素......)


1 - 请注意,任何ArrayList a List ...因为ArrayList类实现了List接口

答案 1 :(得分:0)

&#34;列表&#34;只是一个界面。实施是eq。 &#34; ArrayList的&#34;或&#34; LinkedList&#34;。

但这是Stackoverflow的另一个主题:

how-to-instanceof-listmytype