use*_*133 17 java generics inner-classes
我基本上有一个问题,为什么以下不起作用.我有一个抽象类:
public abstract class Abstrct <T> {
}
Run Code Online (Sandbox Code Playgroud)
然后我定义了一个类,该类使用了一个定义了公共内部类的类,我想将它用于泛型参数,如下所示:
public class Outer extends Abstrct<Inner> {
public class Inner {
}
}
Run Code Online (Sandbox Code Playgroud)
当我正在学习Java时,我更感兴趣的是它为什么不起作用.与其如何使其工作无关,但我也会对此感兴趣.
Sot*_*lis 18
Inner不属于类声明的范围Outer.在extends子句中使用时,它不是已知的类型名称.使用合格的参考:
class Outer extends Abstract<Outer.Inner>
Run Code Online (Sandbox Code Playgroud)
或者导入它:
import com.example.Outer.Inner;
Run Code Online (Sandbox Code Playgroud)
从规范,关于范围:
m在类类型C(第8.1.6节)中声明或继承的成员声明的范围是整个主体C,包括任何嵌套类型声明.
该extends条款是类Superclass声明的一部分,如规范中所述.它不是班级机构的一部分.
import但是,声明中使用的类型的范围,
[..] 是出现导入声明的编译单元中的所有类和接口类型声明(第7.6节),以及编译单元的包声明(如果有)的任何注释.