Рубрики
Без рубрики

Вступает в силу со вторника! Классы полезности!

Погружение в третью главу “Эффективная Java”. С тегами java, effective, design, architecture.

Время для четвертой главы нашего эффективного обзора Java! Сегодня – быстрая и простая глава.

Сегодня мы говорим о классах полезности. Как указывает автор, эти классы часто могут восприниматься как анти-шаблон и способ обойти использование правильных объектов. При этом у них определенно есть свое предназначение в мире, особенно на Java. Итак, давайте рассмотрим некоторые места, где служебные классы могут быть полезны:

  • Для группировки действий над примитивными объектами. ie java.lang. Math , java.util. Массивы
  • Для группировки действий в классах, которыми вы не владеете. Это похоже на описанное выше, но в данном случае это относится к объекту, к изменению которого у вас может не быть доступа. Local DateUtils – это то, что я видел раньше. Это то, что функции расширения
  • могут решить гораздо более чистым способом на таких языках, как Kotlin. Они также могут быть домом для заводских методов, таких как в

Итак, мы видим, что есть некоторые варианты использования, в которых это полезно, так как же нам это сделать? Что на самом деле сводится к тому, чтобы не забыть учесть, что он не может быть создан. Мы знаем, что даже если вы не включаете конструктор, Java добавит конструктор без аргументов по умолчанию.

Первый метод заключается в том, чтобы сделать класс абстрактным классом. Это действительно делает невозможным создание экземпляра класса напрямую, но на самом деле не выполняет то, что ему нужно. Рассуждения двоякие. Во-первых, пользователь класса может быть производным от этого абстрактного класса и создать экземпляр дочернего класса в этом случае. Другая проблема заключается в том, что абстрактный класс не сообщает о намерениях происходящего. Когда мы видим абстрактный класс, он в основном просит, чтобы его расширили.

Итак, каков другой вариант и тот, который предлагает Эффективная Java? Ну, вы, наверное, могли бы догадаться об этом но суть в том, чтобы создать частный конструктор без аргументов. И все просто: вы теряете свой общедоступный конструктор по умолчанию и получаете защищенный экземпляр вашего класса. Даже упоминается, что ваш частный конструктор без аргументов должен иметь только одну строку, которая выдает AssertionError . Это выводит его на новый уровень, так что даже если один из статических методов попытается создать объект, он выдаст ошибку. Лично я обычно делаю это с помощью Lombok с @NoArgsConstructor(access. ЧАСТНЫЙ) . Вы не понимаете AssertionError выбрасывается, но это просто и дает нам то, что мы хотели.

Итак, как вы можете видеть, это довольно просто и прямолинейно. Если мы обнаружим, что создаем много служебных классов, это может быть признаком того, что мы начинаем склоняться к более процедурному программированию, и, возможно, есть лучший способ выполнить нашу задачу. Однако, если нам действительно нужен служебный класс, не забудьте запретить создание экземпляра вашего класса.

Оригинал: “https://dev.to/kylec32/effective-java-tuesday-utility-classes-4gbi”