[英]Using a nested type as a generic type argument in the enclosing class' supertype declaration
我基本上有一个问题,为什么以下不起作用。 我有一个抽象类:
public abstract class Abstrct <T> {
}
然后我定义了一个类,该类使用了一个定义了公共内部类的类,我想将它用于泛型参数,如下所示:
public class Outer extends Abstrct<Inner> {
public class Inner {
}
}
当我正在学习Java时,我更感兴趣的是它为什么不起作用。 与其如何使其工作无关,但我也会对此感兴趣。
Inner
不在Outer
的类声明范围内。 在extends
子句中使用时,它不是已知的类型名称。 使用合格的参考:
class Outer extends Abstract<Outer.Inner>
或者导入它:
import com.example.Outer.Inner;
从规范,关于范围 :
的成员的声明的范围
m
中声明或由类继承的类型C
(§8.1.6) 是整个身体C
,包括任何嵌套类型声明。
extends
子句是类的Superclass
声明的一部分,如规范中所述。 它不是班级机构的一部分。
但是, import
语句中使用的类型的范围,
[..] 是出现导入声明的编译单元中的所有类和接口类型声明(第7.6节),以及编译单元的包声明(如果有)的任何注释。
您可以使用Abstrct<Outer.Inner>
使类型明确且有效。
您必须明确,因为您定义的内部类不是静态的,因此它只存在于包含类的范围内。 (参见https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html )
在你的情况下尝试以下:
public class Outer extends Abstrct<Outer.Inner> {
public class Inner {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.