Почему изменение параметра типа этого класса влияет на область действия наследуемого вложенного класса?

Редактировать: люди, кажется, были сбиты с толку моими опечатками и неправильным использованием терминологии. Я переписал вопрос для решения этих проблем. Пожалуйста, прости любые дальнейшие ошибки.

У меня есть общий класс A и два класса, которые расширяют его, B а также C, A, B, а также C есть вложенные классы X, Y, а также Z соответственно. И то и другое Y а также Z попробуйте продлить X используя только простое имя типа в объявлении суперкласса. Единственная другая разница между B а также C в том, что 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:

Область объявления члена m, объявленного или унаследованного типом класса C (§8.1.6), является всем телом C, включая любые вложенные объявления типов.

Почему нет X в рамках декларации Z когда это для Y? Это указано в JLS?

0 ответов

Другие вопросы по тегам