код
У меня есть следующий класс с интерфейсом-членом:
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);
}
}
Ошибка
В основном я получаю следующую ошибку от javac: SomeInterface is not public in SomeClass; cannot be accessed from outside package
.
И в Eclipse: SomeInterface is not public in SomeClass; cannot be accessed from outside package
.
Оба компилируются как Java 7. Все компилируется отлично, если я создаю SomeInterface public
.
Но Spec говорит
Спецификация языка Java для Java 7 говорит следующее:
Пользовательский интерфейс - это интерфейс, декларация которого напрямую заключен в другое объявление класса или интерфейса.
Пользовательский интерфейс в объявлении класса является неявным публичным (§6.6) если не указан модификатор доступа.
Спецификация Java Language для Java 5, похоже, не имеет второго предложения.
Вопрос
Поэтому не следует ли считать SomeInterface общедоступным и не должен компилироваться Main?
Обновление
Как было предложено Ajay George, это действительно было ошибка в спецификации языка Java 7 (спасибо JamesB). Тем временем спецификация была скорректирована, а неправильное предложение было удалено. Последняя версия в Archive.org с неправильным предложением.