将源文件限制为单个顶级类

虽然 Java 编译器允许在单个源文件中定义多个顶级类,但这样做没有任何好处,并且存在重大风险。 风险源于在源文件中定义多个顶级类使得为类提供多个定义成为可能。 使用哪个定义会受到源文件传递给编译器的顺序的影响。

示例代码Item25Example01.java:【反例】包含一个引用其他两个顶级类的成员的 Main 类。

如果试图将多个顶级类放入单个源文件中,请考虑使用静态成员类(详见第 24 条)作为将类拆分为单独的源文件的替代方法。 如果这些类从属于另一个类,那么将它们变成静态成员类通常是更好的选择,因为它提高了可读性,并且可以通过声明它们为私有(详见第 15 条)来减少类的可访问性。

示例代码Item25Example02.java:使用静态成员类作为将类拆分为单独的源文件的替代方法。

永远不要将多个顶级类或接口放在一个源文件中。

遵循这个规则保证在编译时不能有多个定义。

这又保证了编译生成的类文件以及生成的程序的行为与源文件传递给编译器的顺序无关。