java – 类声明中的成员接口是否隐含public?
码
我有一个成员接口的类: 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中得到以下错误:SomeClass中SomeInterface不是public;不能从外部包装访问. 在Eclipse中:SomeInterface在SomeClass中不是public;不能从外部包装访问. 两者都编译为Java 7.如果我将SomeInterface公开,那么所有的编译都很好. 但规格说 Java Language Specification for Java 7说:
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. 解决方法
我猜这个规范是错的.
这是您的代码的javap输出. E:workspace>javap comexamplewithinterfaceSomeClass Warning: Binary file comexamplewithinterfaceSomeClass contains com.example.wi thinterface.SomeClass Compiled from "SomeClass.java" public class com.example.withinterface.SomeClass { public com.example.withinterface.SomeClass(); } E:workspace>javap comexamplewithinterfaceSomeClass$SomeInterface Warning: Binary file comexamplewithinterfaceSomeClass$SomeInterface contains com.example.withinterface.SomeClass$SomeInterface Compiled from "SomeClass.java" interface com.example.withinterface.SomeClass$SomeInterface { public abstract void doSomething(); } 我将界面更改为public,然后重新编译. E:workspace>javap comexamplewithinterfaceSomeClass Warning: Binary file comexamplewithinterfaceSomeClass contains com.example.wi thinterface.SomeClass Compiled from "SomeClass.java" public class com.example.withinterface.SomeClass { public com.example.withinterface.SomeClass(); } E:workspace>javap comexamplewithinterfaceSomeClass$SomeInterface Warning: Binary file comexamplewithinterfaceSomeClass$SomeInterface contains com.example.withinterface.SomeClass$SomeInterface Compiled from "SomeClass.java" public interface com.example.withinterface.SomeClass$SomeInterface { public abstract void doSomething(); } 注意内在类的差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |