В течение последнего десятилетия или около того я использовал шаблон ниже для своих классов служебных программ Java. Класс содержит только статические методы и поля, объявляется final
, поэтому он не может быть расширен и имеет конструктор private
, поэтому он не может быть создан.
public final class SomeUtilityClass {
public static final String SOME_CONSTANT = "Some constant";
private SomeUtilityClass() {}
public static Object someUtilityMethod(Object someParameter) {
/* ... */
return null;
}
}
Теперь, с введением статических методов в интерфейсах в Java 8, я в последнее время обнаружил, что использую шаблон интерфейса утилиты:
public interface SomeUtilityInterface {
String SOME_CONSTANT = "Some constant";
static Object someUtilityMethod(Object someParameter) {
/* ... */
return null;
}
}
Это позволяет мне избавиться от конструктора и много ключевых слов (public
, static
, final
), которые неявны в интерфейсах.
Есть ли недостатки в этом подходе? Есть ли какие-либо преимущества в использовании служебного класса над служебным интерфейсом?