[英]Nested Generics in Java
请允许我请求解释。
在方法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必须参数化,因为它使用参数化类型限定”
请你帮我解释一下吗?
请注意,在以前的代码中,类和方法是静态的。
另请注意,将通用类设为Container,如
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>();
}
}
}
谢谢。
嵌套类(作为类的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>()
会导致错误
“必须参数化成员类型
A.Container.In
,因为它使用参数化类型进行限定”
Inner
成员类型是In
的嵌套类,它是Container
的嵌套类,它是A
的嵌套类。 它们都与声明类中声明的类型参数没有任何关系。
这似乎是IDE中的一个错误,我会报告它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.