请允许我请求解释。
在方法doit()内部,我可以实例化通用嵌套类In<T>
public class A {
public static class In<T> {
}
public static <X> void doit() {
new In<X>();
}
}
我当然也可以联系班级In<T>
public class A {
public static class In<T> {
public static class Inner<U> {
}
}
public static <X> void doit() {
new In.Inner<X>();
}
}
当类和方法嵌套在另一个类Container
中时,我仍然可以从方法doit()到达类In<T>
的成员
public class A {
public static class Container {
public static class In<T> {
public static class Inner<U> {
}
}
public static <X> void doit() {
new In.Inner<X>();
}
}
}
然而,制作A泛型,如
public class A<V> {
public static class Container {
public static class In<T> {
public static class Inner<U> {
}
}
public static <X> void doit() {
new In.Inner<X>();
}
}
}
编译器除了错误:“成员类型A.Container.In必须参数化,因为它使用参数化类型限定”
请你解释一下吗?
请注意,在之前的代码中,类和方法都是静态的。
另请注意,将类设为通用容器,如
public class A<V> {
public static class Container<Z> {
public static class In<T> {
public static class Inner<U> {
}
}
public static <X> void doit() {
new In.Inner<X>();
}
}
}
代码编译。
并编译以下代码,其中Container不再是通用的,但类Inner<U>
的构造函数的调用现在更合格Container.In.Inner<X>()
public class A<V> {
public static class Container {
public static class In<T> {
public static class Inner<U> {
}
}
public static <X> void doit() {
new Container.In.Inner<X>();
}
}
}
谢谢。
答案 0 :(得分:2)
作为类的static
成员的嵌套类不依赖于类的(实例)类型参数。因此,在您的示例中
class A<V> {
public static class Container {
public static class In<T> {
public static class Inner<U> {
}
}
public static <X> void doit() {
new In.Inner<X>(); // compilation error
}
}
}
绝对没有理由创建类实例表达式
new In.Inner<X>()
会导致错误
&#34;成员类型
进行限定A.Container.In
必须参数化,因为它是 使用参数化类型&#34;
Inner
成员类型是In
的嵌套类,它是Container
的嵌套类,它是A
的嵌套类。它们都与声明类中声明的类型参数没有任何关系。
这似乎是你的IDE中的一个错误,我会报告它。