使用本地类时出现错误“实例的非法泛型类型”
2022-08-31 15:41:38
我有以下使用本地类的Java代码。
import java.util.Arrays;
public class X<T> {
void m() {
class Z {}
for (Object o : Arrays.asList(1, 2, 3))
if (o instanceof Z) {}
}
}
它不会编译并显示以下错误消息:
X.java:8: error: illegal generic type for instanceof
if (o instanceof Z) {}
^
1 error
我知道局部类继承了 的泛型类型签名,是一个内部类。在此示例中出现相同类型的编译错误,其中不是本地的,但仍然是内部的:Z
X<T>
Z
import java.util.Arrays;
public class X<T> {
class Z {}
void m() {
for (Object o : Arrays.asList(1, 2, 3))
if (o instanceof Z) {} // Compilation error
}
}
它可以通过使非内部/静态来解决:Z
import java.util.Arrays;
public class X<T> {
static class Z {}
void m() {
for (Object o : Arrays.asList(1, 2, 3))
if (o instanceof Z) {} // Compiles now
}
}
或者通过验证 X.Z
:
import java.util.Arrays;
public class X<T> {
class Z {}
void m() {
for (Object o : Arrays.asList(1, 2, 3)) {
if (o instanceof X.Z) {} // Compiles now
if (o instanceof X<?>.Z) {} // Also
}
}
}
但是,如何在不更改本地类本身的情况下限定本地类或解决此限制?