Благодаря опыту, который я получил, работая со стажерами по разработке программного обеспечения, я заметил некоторые типичные ошибки и шаблоны программирования.

Здесь я перечислил некоторые из типичных ошибок и плохих приемов, которые будут совершать новые разработчики программного обеспечения. Таким образом, это поможет новым разработчикам Java выявлять и исправлять свои ошибки в будущем.

Эта статья - вторая из серии.

Вторая по частоте ошибка в моделях Классы случаются в классе Конструкторы.

Нет конструктора по умолчанию, в котором существуют поля коллекции

Когда есть класс с коллекциями, лучше всего иметь конструктор с инициализацией коллекции. В противном случае значение коллекции по умолчанию равно null, если вызывается конструктор по умолчанию.

Но для примитивных полей практика заключается в создании их экземпляров в строке, а не в конструкторе со значением по умолчанию.

/**
 * Created by Dulaj on 2019-05-28.
 */
public class DataHolder<T> {
    
    private String id = "";
    private List<T> data;
    
    public DataHolder() {
        data = new ArrayList<>();
    }
    
    public List<T> getData() {
        return data;
    }
    
    public void setData(List<T> data) {
        this.data = data;
    }
}

Вызов не финальных методов в конструкторах

Вызов не финальных методов приведет к неожиданному поведению, потому что в дочерних классах этот не финальный метод может быть переопределен. Поэтому поведение может отличаться от ожидаемого. (вызов метода super вызовет переопределенный дочерний метод, что может вызвать ошибки). Внешний пример

Причина этих проблем в основном заключается в том, что если переопределенный метод обращается к полю дочернего класса, которое будет инициализировано в конструкторе. Но вызов общедоступных конечных методов или частных методов (оба не могут быть переопределены) никогда не вызовет таких проблем и безопасен для вызова в конструкторе.

Конструктор / Метод с большим количеством параметров

Метод с большим количеством параметров приведет к меньшей читабельности и понятности кода. Поэтому конструктор и другие методы должны иметь ограниченное количество параметров. Если для какого-то метода требуется множество параметров, то мы должны их инкапсулировать (используя дополнительный класс).

Служебным классам нужен частный конструктор

Util Class - это класс только со статическими членами (методами и полями).

По сути, служебный класс без частного конструктора приведет к ошибочному созданию экземпляра и скрывает служебный характер (не предназначенный для создания экземпляров). Но весь смысл наличия класса Util состоит в том, чтобы вызывать его методы с использованием класса (а не экземпляра). Java добавит конструктор по умолчанию к каждому классу, если он не объявлен явно. Поэтому во избежание создания экземпляров требуется частный конструктор.

В приведенном выше примере показан класс только со статическими членами, а частный конструктор позаботится о том, чтобы не создавать экземпляры снаружи.

Затем вы можете вызывать методы и получать доступ к таким полям.

int length = SampleUtil.getLength("sample text ");
String key = SampleUtil.KEY;

Давайте посмотрим на некоторые общие ошибки в третьей части цикла статей.

Пожалуйста, оставьте комментарий ниже, если у вас есть какие-либо вопросы или отзывы.

Если вам понравился этот пост, подпишитесь на меня на Medium, чтобы увидеть больше похожих постов.

Если у вас есть какие-либо проблемы или вопросы, используйте раздел комментариев ниже.