Java 中的多个类声明:详解
在 Java 中,多个顶级类可以共存于一个文件中,只需其中之一被指定为公共。这种技术缺乏类似于内部类、嵌套类或匿名类的特定名称,提出了两个关键问题:
1。这些辅助类是否被限制与其编译单元之外的代码进行交互?
Java 语言规范 (JLS) 允许但不强制禁止其他编译单元中的代码引用辅助类的限制在同一个包内。这意味着它们不能被视为包私有。
2。不同的 Java 实现是否以不同的方式处理此限制?
与 JLS 相反,Java 编译器 javac 主动强制执行限制,该限制有效地阻止从外部文件引用顶级类,除非它们与外部文件共享相同的名称它们所在的文件。
详细说明
此限制当文件 A 中的类尝试访问文件 B 中的类时出现,其中文件 B 还包含与文件 B 同名的另一个类。但是,如果文件 A 中的类也访问文件 B 中同名的另一个类,编译错误消失。
至说明:
FileA.java:
public class FileA { private FileB fileB; }
FileB.java:
public class FileB { private class FileBClass { } }
编译 FileA.java 单独会导致错误:
FileA.java:2: cannot find symbol symbol : class FileBClass location: class FileA
要解决此问题,FileA.java 还必须引用 FileB.java,或者 FileB.java 必须引用编译的
结论
虽然没有明确禁止,但 javac 的强制限制不鼓励从外部文件引用顶级类,除非它们与它们所在的文件共享相同的名称,使得这种做法在大多数情况下不切实际。
以上是一个文件中的多个顶级Java类可以与外部代码交互吗?的详细内容。更多信息请关注PHP中文网其他相关文章!