Является ли интерфейс-член в объявлении класса неявно общедоступным?

Код

У меня есть следующий класс с интерфейсом-членом:

package com.example.withinterface;

public class SomeClass {

    interface SomeInterface {

        void doSomething();
    }
}

И другой класс пытается получить к нему доступ:

package com.example.withinterface.main;

import com.example.withinterface.SomeClass;

public class Main {

    public static void main(String[] argss) {
        System.out.println(SomeClass.SomeInterface.class);
    }
}

Ошибка

В Main я получаю следующую ошибку от javac:SomeInterface is not public in SomeClass; cannot be accessed from outside package.

И в «Затмении»:SomeInterface is not public in SomeClass; cannot be accessed from outside package.

Оба компилируются как Java 7. Все компилируется нормально, если я делаю SomeInterface public.

Но Спец говорит

Спецификация языка Java для Java 7 говорит об этом:

A member interface is an interface whose declaration is directly enclosed in another class or interface declaration.

A member interface in a class declaration is implicitly public (§6.6) unless an access modifier is specified.

Спецификация языка Java для Java 5 , похоже, не содержит второго предложения.

Вопрос

Так не должен ли SomeInterface считаться общедоступным и не должен компилироваться Main?

Обновление

Как предположил Аджай Джордж , это действительно ошибка в Спецификации языка Java 7(спасибо JamesB). Тем временем спецификация была исправлена, а неправильное предложение удалено. Последняя версия на Archive.org с неверным предложением .

10
задан Community 23 May 2017 в 10:34
поделиться