代码
我有以下带有成员接口的类:
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
.
在 Eclipse 中:SomeInterface is not public in SomeClass; cannot be accessed from outside package
.
两者都编译为 Java 7。如果我制作 SomeInterface ,一切都编译得很好public
。
但规格说
Java 7的Java 语言规范是这样说的:
成员接口是其声明直接包含在另一个类或接口声明中的接口。
除非指定访问修饰符,否则类声明中的成员接口是隐式公共的(第 6.6 节)。
Java 5的Java 语言规范似乎没有第二句话。
问题
那么 SomeInterface 不应该被认为是公共的,不应该 Main 编译吗?
更新
正如Ajay George所建议的,这确实是 Java 语言规范 7 中的一个错误(感谢JamesB)。与此同时,规范被纠正,不正确的句子被删除。Archive.org 中的最后一个版本,带有不正确的句子。