首页 > 解决方案 > 比较时出现“Illegal generic type for instanceof”错误

问题描述

在我的代码中有 3 个自定义类

CheckinTemplate
Employee
Status

虽然出现了一种情况,但Object o, 可能是上述类列表中的任何一个。我想按如下进行比较并执行某些逻辑,但出现错误“instanceof 的泛型类型非法”

if (o instanceof List<CheckinTemplate>) {

} else if (o instanceof List<Employee>) {

} else if (o instanceof List<Status>) {

}

标签: javaandroid

解决方案


这是无法完成的,因为instanceof在运行时评估,但泛型类型参数在编译期间被删除。List<CheckinTemplate>这意味着在运行时和之间没有区别List<Employee>

您可以检查是否o instanceof List(或者o instanceof List<?>是否要避免使用原始List类型)。如果是,您可以将其强制转换为List(或List<?>),然后instanceof在其元素上运行以确定它们的类型。

if (o instanceof List) {
    List list = (List) o;
    for (Object e : list) {
        if (e instanceof CheckinTemplate) {

        } else if (e instanceof Employee) {

        } else if (e instanceof Status) {

        }
    }
}

推荐阅读