Ответ 1
Для Java-класса с полным отсутствием состояния я предлагаю объявить класс public
и final
и иметь частный конструктор для предотвращения создания экземпляров. Ключевое слово final
предотвращает создание подклассов и может повысить эффективность во время выполнения.
Класс должен содержать все static
методы и не должен объявляться как abstract
(поскольку это подразумевает, что класс не является конкретным и должен быть каким-то образом реализован).
Классу должно быть присвоено имя, соответствующее его набору предоставляемых утилит (или "Util", если класс должен предоставлять широкий спектр некатегоризованных утилит).
Класс не должен содержать вложенный класс, если только вложенный класс не должен быть служебным классом (хотя эта практика потенциально сложна и ухудшает читабельность).
Методы в классе должны иметь соответствующие имена.
Методы, используемые только самим классом, должны быть закрытыми.
У класса не должно быть никаких не окончательных/нестатических полей класса.
Класс также может быть статически импортирован другими классами для улучшения читабельности кода (однако это зависит от сложности проекта).
Пример:
public final class ExampleUtilities {
// Example Utility method
public static int foo(int i, int j) {
int val;
//Do stuff
return val;
}
// Example Utility method overloaded
public static float foo(float i, float j) {
float val;
//Do stuff
return val;
}
// Example Utility method calling private method
public static long bar(int p) {
return hid(p) * hid(p);
}
// Example private method
private static long hid(int i) {
return i * 2 + 1;
}
}
Возможно, самое главное, документация для каждого метода должна быть точной и описательной. Скорее всего, методы из этого класса будут использоваться очень часто, и хорошо иметь качественную документацию для дополнения кода.