在这三种创建对象的方法中,哪种方法的执行时间更快?
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");
而字段的数量可以有区别吗?
除了性能比较之外(小菜一碟...),你不应该根据执行时间来使用对象创建策略,而应该根据你的实际需要、要求和最佳实践来使用。
Fluent Builder pattern
Remark
: 不要用这种模式来掩盖你的类定义了太多字段的事实......使用像这样的模式 extract class
而不是通过建筑商施工。
Javabean style
. 这种类型的构造是(IMO)一种不好的做法,因为在无参数构造和调用setters初始化它之间的时间,对象处于不一致的状态。
Primary constructor
. 当所有字段都被初始化时,你更喜欢这种方式。required
.
让我们来评估一下每种语法有多少堆栈框架(只是一个粗略的图,请原谅我的简洁)。
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
通过上述分析,第三种语法获胜,但你的编译器可能会以这样的方式进行优化,使这三种语法的执行时间相似。