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


问题内容

在我看来,创建辅助类时,非公共顶级类和静态嵌套类实际上执行相同的任务。

A.java


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

A.java


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

   static class AHelper {}
}

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


问题答案:

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

Sun教程

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