如何判断一个 Java 对象是否为 List

4
我希望你能告诉我如何询问一个Java对象是List还是ArrayList。
例如:
if (Object instanceof List <?>)) {
    // Do something
}

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


5
去掉<> - Sotirios Delimanolis
一个 ArrayList 一个 List。你是在问它是否是 List 的另一种实现吗? - Louis Wasserman
你也可以使用 .getClass 方法并检查它返回的内容。 - ederollora
2个回答

6

要测试一个实例是否为ListArrayList1,只需使用instanceof

请注意,根据JLS 15.20.2的规定,instanceof运算符的类型操作数必须是可重用类型,在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
}

我有几个不同类型的列表,并希望为任何类型的数据实现该方法,这不是问题。
(但如果您希望该方法仅适用于包含某些特定类型数据的列表...基于简单的运行时类型检查,则会出现问题。泛型类型的类型参数在运行时不可用于运行时测试,因此您需要单独测试列表中的每个元素...)
请注意,任何ArrayList也都是List......因为ArrayList类实现了List接口。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接