Код
У меня есть следующий класс с интерфейсом-членом:
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 с неверным предложением .