为什么更改此类的类型参数会影响继承的嵌套类的范围?

时间:2017-05-08 18:21:11

标签: java jls

编辑:人们似乎因为我的拼写错误和滥用术语而被抛弃了。我已经重写了解决这些问题的问题。请原谅任何进一步的错误。

我有一个通用类A和两个扩展它的类,BCABC分别具有嵌套类XYZYZ都尝试在超类声明中仅使用简单类型名称来扩展XBC之间的唯一区别是B扩展A<Object>C扩展A<C.Z>。出于某种原因,X不在Z声明的范围内:

class A<T> {
    static class X {}
}

class B extends A<Object> {
    static class Y extends X {} // okay
}

class C extends A<C.Z> {
    static class Z extends X {} // error: X cannot be resolved to a type
}

这似乎与JLS中的范围规则相反:

  

在类类型C(第8.1.6节)中声明或继承的成员m的声明范围是C的整个主体,包括任何嵌套类型声明。

为什么XZ的声明范围内不是Y?这是在JLS中指定的吗?

0 个答案:

没有答案