Checkstyle имеет хорошее правило для классов Util, в котором говорится:
классов Utility не должны иметь какие-либо не-частные конструкторов и должны быть окончательными.
Это связано с тем, что вы не хотите, чтобы теневое взаимодействие с вашими методами и потому, что если вам нужен конструктор, то это не класс полезности.
Возвращаясь к вашему примеру:
Имея конструктор инициализации статических полей является BAD.
Почему? Потому что они изменяемы.
Вы говорите, что можете изменить их, сделав их нефинальными. Итак, предположим, что ваш метод что-то делает с ними, меняя их значения, а затем идет другой поток и создает другой экземпляр вашего объекта во время работы этого метода. И, следовательно, - сброс статических полей. Ваш метод внезапно ломается ужасно без каких-либо видимых причин, и вы не сможете воспроизвести его.
Лучший способ сделать это - сделать поля окончательными. Если они непреложны, тогда нет никакой опасности. Но как вы их инициализируете? Вы не можете использовать конструктор (ошибка компилятора). Что может помочь static initializers. Они запускаются один раз, когда класс загружается и имеет полный доступ к статическим полям. Вы можете использовать один блок для установки ваших значений.
Если поля являются mutable, то их статические и инициализировать в конструкторе - это самое худшее, что вы можете сделать. Переосмыслите свой дизайн. В противном случае вы открываете совершенно новую банку червей в проблемах с потоками.
Слова предупреждения:
Я не уверен в коде, который вы дали, но мне кажется, что с помощью статических-одиночек Util класса является плохой идеей здесь. Большинство приложений захотят менять ключи время от времени, а нетривиальная логика в статическом классе очень трудно проверить. Есть лучшие способы сделать это, самые простые из которых - сделать ваш CipherUtil
фактическим компонентом.
Это статические методы, и они используют статические свойства; вам не нужен экземпляр. –
У вас нет. Погрузчик классов выполнит инициализацию для вас, поскольку метод является статическим. – Ordous
Вы должны изменить это на статический инициализатор. – SLaks