Java 当一个文件中有多个包私有类时,可以从包中的其他文件引用它们吗?

Java 当一个文件中有多个包私有类时,可以从包中的其他文件引用它们吗?,java,Java,根据JLS,在一个文件中包含多个类是有效的语法,只要文件中只有一个类是公共的。据我所知,这通常是为了允许在该文件中维护仅在单个文件中引用的小型类 我不确定的一个方面是,同一个包中的其他文件是否能够安全地引用原始文件中的第二个类——根据作用域规则,它似乎是有效的,但我不确定编译时是否有问题。我经常看到它工作,但项目中的其他开发人员也告诉我,在系统中的其他地方进行更改后,偶尔会出现构建问题,无法找到有问题的符号。这种引用嵌入在其他类文件中的包私有类的设置是否会在进程中引入某种排序编译顺序依赖关系,从

根据JLS,在一个文件中包含多个类是有效的语法,只要文件中只有一个类是公共的。据我所知,这通常是为了允许在该文件中维护仅在单个文件中引用的小型类


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

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

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

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

public class OuterClass
{
    // Normal code...

    // Only used within OuterClass
    private static class Foo
    {
    }
}
这比提供包私有访问更干净(IMO),如果它真的只打算从单个类使用的话