Мне кажется, что непубличные классы верхнего уровня и статические вложенные классы по существу выполняют одни и те же задачи при создании вспомогательного класса.
 
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 {}
}
 
Помимо того, как они ссылаются, мне кажется очень мало различий между двумя способами создания класса-помощника. Вероятно, это зависит главным образом от предпочтений; кто-нибудь видит что-то, что мне не хватает? Я полагаю, что некоторые люди будут утверждать, что лучше иметь один класс для исходного файла, но с моей точки зрения кажется более чистым и более организованным, чтобы иметь непубличный класс верхнего уровня в том же исходном файле.
