более быстрый способ создания объекта lombok builder против объявления вручную - PullRequest
2 голосов
/ 24 апреля 2020

Между этими тремя способами создания объекта, какой из них быстрее во время выполнения?

Amount.builder().categoryCode("A").coveredAmount(new 
BigDecimal(100)).build();

или

Amount cva1 = new Amount();
cva1.setCoveredAmount(new BigDecimal(100));
cva1.setCategoryCode("A");

или

Amount cva1 = new Amount(new Bigdecimal(100), "A");

А количество полей можно сделать разным?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Позволяет оценить, сколько стековых кадров имеет каждый синтаксис (просто грубая диаграмма, извините за краткость):

1) builder() ->returns -> categoryCode() -> return this -> coveredAmount() -> return this
-> new BigDecimal() -> return BigDecimal -> return this -> finally build() -> returns Amount

Итак, всего 6 вызовов функций.

2) ctr call -> return Amount -> setter -> bigdecimal -> return bigdecimal -> return setter -> (same again as last step)

Всего 5 звонки

For 3) only 2 function calls

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

1 голос
/ 24 апреля 2020

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

  1. Fluent Builder pattern

    • Лучше для удобочитаемости
    • Необязательные атрибуты
    • Построение в несколько шагов

Remark: не используйте этот шаблон, чтобы скрыть тот факт, что ваш класс определяет слишком много полей ... используйте шаблон как extract class вместо того, чтобы проходить конструктор конструктора.

Javabean style. Этот тип конструкции (IMO) является плохой практикой, поскольку за время между конструкцией без аргументов и вызовами сеттеров для ее инициализации объект все еще находится в несогласованном состоянии.

Primary constructor. Вы предпочитаете этот способ, когда все поля required.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...