我有一个成员接口下面的类:
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
,一切都会编译好。
但规格说
的Java Language Specification for Java 7这样说:
甲构件接口是一个接口,其声明直接 封闭在另一个类或接口声明。
类声明中的成员接口隐式公开(§6.6) ,除非指定了访问修饰符。
Java Language Specification for Java 5似乎没有第二句话。
问题
所以不应SomeInterface被视为公众,不应该主要编译?
更新
至于建议的Ajay George这的确是an error in the Java Language Specification 7(感谢JamesB)。与此同时,规范被纠正,并删除了不正确的句子。 Last version in Archive.org with the incorrect sentence。
呵呵。除非另有说明,否则我一直认为一切都是包装保护。我想我学到了一些新东西。 – 2012-07-24 20:17:45
我认为这是因为没有访问修饰符的memeber正在访问包。所以他们不能被其他软件包使用 – 2012-07-24 20:19:09
@Desolator你看过这个问题吗?成员接口在默认情况下为**公共**。 – 2012-07-24 20:22:37