非公共顶级类与静态嵌套类

2022-09-02 12:45:35

在我看来,在创建帮助程序类时,非公共顶级类和静态嵌套类基本上执行相同的任务。


答.java


public class A 
{
    public static main (String[] args)
    {
        AHelper helper = new AHelper();     
    }
}
class AHelper {}

答.java


public class A
{
    public static main (String[] args)
    {
        A.AHelper helper = new A.AHelper();     
    }

   static class AHelper {}
}
 

除了如何引用它们之外,在我看来,创建帮助器类的两种方法之间几乎没有区别。它可能主要归结为偏好;有没有人看到我错过的任何东西?我想有些人会争辩说,每个源文件有一个类更好,但从我的角度来看,在同一源文件中有一个非公共顶级类似乎更清晰,更有条理。


答案 1

在这两个示例中,每个源文件都没有一个类。但通常,使用静态嵌套类来表示它只打算在其封闭类中使用(强制将其引用为 )。如果您将该类移动到顶层,则不太清楚。A.AHelper

来自 Sun 教程

类的逻辑分组 - 如果一个类仅对另一个类有用,则将其嵌入该类中并将两者保持在一起是合乎逻辑的。嵌套这样的“帮助程序类”会使其包更加简化。


答案 2

想到的一件事是帮助器类的范围。嵌套类有权访问父类的私有成员。如果帮助程序位于其自己的文件中,则您不享受此类访问权限,尽管使用默认包可见作用域可以轻松处理。

另一个注意事项是代码重用 - 您可能希望帮助程序帮助包中的多个类。


推荐