我有以下使用本地类的 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>
,是一个内部类。这个例子中出现了同样的编译错误,where Z
is not local,但还是inner:
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
}
}
}
但是我怎样才能在不改变本地类本身的情况下限定本地类,或者解决这个限制呢?