Ответ 1
Есть ли какая-либо польза для использования частного статического класса A?
Хорошо, он полностью скрывает реализацию, поэтому с точки инкапсуляции это довольно хорошо. Одна ситуация, которую я видел это несколько раз, - это пользовательские компараторы. Например:
public class Person
{
public static final Comparator<Person> NAME_COMPARATOR = new NameComparator();
public static final Comparator<Person> AGE_COMPARATOR = new AgeComparator();
// Name, age etc properties
private static class NameComparator implements Comparator<Person>
{
...
}
private static class AgeComparator implements Comparator<Person>
{
...
}
}
Нет реальной необходимости, чтобы классы реализации компаратора были видны вне Person
, и приятно иметь возможность легко получить экземпляр через публичное статическое поле.
Никакие абоненты не должны знать реализацию - может быть только один класс компаратора, который принимает параметры, например, - они просто выражают, какой компаратор они хотят через константы. (Конечно, вы можете использовать перечисление для этого, конечно.)