【问题标题】:When you have multiple package-private classes in a file, can they be referred to from other files in the package?当一个文件中有多个包私有类时,可以从包中的其他文件中引用它们吗?
【发布时间】:2012-01-07 14:17:53
【问题描述】:

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

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

    public class OuterClass
    {
        // Normal code...
    
        // Only used within OuterClass
        private static class Foo
        {
        }
    }
    

    这比提供包私有访问更干净 (IMO),如果它真的只打算在单个类中使用的话。

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2021-08-23
      相关资源
      最近更新 更多