У меня есть класс, который уже имеет «естественный» порядок, и я хочу определить другой компаратор, который можно использовать аналогично String.CASE_INSENSITIVE_ORDER
- то есть определить его как экземплярное статическое поле, к которому можно обращаться при необходимости.
С интерфейсом Foo, который является фактическим типом сравнения (это будет Comparator<Foo>
), я предпочитаю помещать его туда, а не FooImpl (только одна реализация в данном конкретном случае, если это имеет значение). Он реализован с использованием внутреннего класса, похожего на класс String, за исключением того, что этот класс должен быть публичным, поскольку Foo является интерфейсом.
Хотите знать, лучше ли поместить его в FooImpl вместо Foo, и если да, то почему? Также меня не волнует общедоступная видимость реализующего класса, но должна ли это быть отдельная видимая сущность отдельного пакета вместо этого?