更快的方式创建对象lombok builder与手动声明

问题描述 投票:1回答:1

在这三种创建对象的方法中,哪种方法的执行时间更快?

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");

而字段的数量可以有区别吗?

java lombok
1个回答
1
投票

除了性能比较之外(小菜一碟...),你不应该根据执行时间来使用对象创建策略,而应该根据你的实际需要、要求和最佳实践来使用。

  1. Fluent Builder pattern

    • 更好的可读性
    • 可选属性
    • 多步施工

Remark : 不要用这种模式来掩盖你的类定义了太多字段的事实......使用像这样的模式 extract class 而不是通过建筑商施工。

  1. Javabean style. 这种类型的构造是(IMO)一种不好的做法,因为在无参数构造和调用setters初始化它之间的时间,对象处于不一致的状态。

  2. Primary constructor. 当所有字段都被初始化时,你更喜欢这种方式。required.


2
投票

让我们来评估一下每种语法有多少堆栈框架(只是一个粗略的图,请原谅我的简洁)。

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

通过上述分析,第三种语法获胜,但你的编译器可能会以这样的方式进行优化,使这三种语法的执行时间相似。

© www.soinside.com 2019 - 2024. All rights reserved.