在比较时获取"非法泛型类型for instanceof"错误

Ebi*_*Joy 1 java android

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

CheckinTemplate
Employee
Status
Run Code Online (Sandbox Code Playgroud)

虽然有一个场景出现了Object o,但可能是上面列出的任何一个列表.我想比较如下并做某些逻辑,但错误来自"非法泛型类型的例子"

if (o instanceof List<CheckinTemplate>) {

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

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

}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

这是无法完成的,因为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) {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)