java - 当你在一个文件中有多个包私有(private)类时,它们可以从包中的其他文件中引用吗?

标签 java

根据 JLS,在一个文件中包含多个类是有效的语法,只要文件中只有一个类是公共(public)的即可。据我了解,这通常是为了允许仅在单个文件中引用的小类保留在该文件中。

我不确定的一个方面是同一个包中的其他文件是否能够安全地引用原始文件中的第二个类 - 根据范围规则它似乎有效,但我不确定它是否是编译时的问题。我经常看到它工作正常,但该项目的其他开发人员也告诉我,在系统其他地方进行更改后,偶尔会出现构建问题,无法找到有问题的符号。这种引用嵌入其他类文件中的包私有(private)类的设置是否将某种编译顺序依赖性引入了使构建变得脆弱的过程?

最佳答案

是的,这绝对没问题——基本上,除非您的构建系统配置不当。无论如何,您可能应该一次性编译同一个包的所有源代码。

我可以看到它可能会导致一些构建系统出现问题,这些构建系统试图找出需要重新编译的内容 - 如果它们假设源文件的名称与结果类的名称相匹配,它们在这里可能会感到困惑(即使您在同一个文件中没有多个类)但这是一个工具问题而不是语言问题。

请注意,通常情况下,如果我有“仅在单个文件中引用的小类”,我通常会将它们设为私有(private)静态嵌套类:

public class OuterClass
{
    // Normal code...

    // Only used within OuterClass
    private static class Foo
    {
    }
}

如果它真的只打算从一个类中使用,那比给予包私有(private)访问更干净(IMO)。

关于java - 当你在一个文件中有多个包私有(private)类时,它们可以从包中的其他文件中引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770328/

相关文章:

java - 什么是 Ivy ?它与 Ant 有什么关系?

java - 将arraylist中的所有对象转换为java中的字节数组

java - Apache POI 没有设计整行的样式

java - 未设置属性路径 - 在类路径中查找

n个系统的Java单机应用无需手动安装?

java - 试图用开关盒内的开关盒打破 while 循环

java - Android HTML Jsoup

java - 代码使用 Neuroph 给出了 VectorSizeMismatchException

java - 日志事件的 Log4J 重新路由

java - 关于 LinkedBlockingQueue,需要澄清