检查对象是否为给定类名列表的实例

2022-09-03 04:37:21

给定 一个 和 一个 ,我想检查是否是Object oString className = "org.foo.Foo"oList<className>

我试过这个,但无法编译:

Class<?> cls = Class.forName(className);
if (o instanceof List<cls>){ // this gives error: cls cannot be resolved to a type
  doSomething();
}

请注意,我的输入是和(请注意类型)。Object oString className


答案 1

这是因为类型擦除。声明

if (o instanceof List<cls>) {
  doSomething();
}

将在运行时执行,此时列表的通用类型将被删除。因此,检查泛型类型没有意义。instanceof


答案 2

我认为你可以分两步完成:首先,你检查它是一个列表。

if (o instanceof List)

然后,检查列表中的一个(每个?)成员是否具有给定的类型。

for (Object obj : (List) o) {
    if (obj instanceof cls) {
        doSomething();
    }
}