2012-01-07 58 views
1

根据JLS,只要文件中只有一个类是公共的,在一个文件中就有多个类是有效的语法。据我了解,这通常是为了让只在单个文件中引用的小类在该文件中被维护。如果文件中有多个包专用类,它们是否可以从包中的其他文件引用?

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

回答

3

是的,这应该是绝对好的 - 除非你有一个配置错误的构建系统,基本上。无论如何,你应该一次性编译同一个软件包的所有源代码。

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

注意,通常如果我有“在一个单一的文件称只有小班”我通常让他们的私有静态嵌套类:

public class OuterClass 
{ 
    // Normal code... 

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

这是清洁剂(IMO)不是给一些包私有访问,如果它真的只打算从一个类使用。

相关问题