我希望更新DateTime
对象的时间。我注意到有两种不同的方法来创建具有更新时间的DateTime
对象的副本,但我不确定要使用哪种方法。
使用其中一个优势是否有优势?
import org.joda.time.DateTime;
DateTime oldTime = DateTime.now()
newTime = oldTime.withMinuteOfHour(30)
与
import org.joda.time.DateTime;
DateTime oldTime = DateTime.now()
newTime = oldTime.minuteOfHour.setCopy(30)
答案 0 :(得分:2)
谈论性能 - 我真的不太感兴趣,因为这3行几乎永远不会成为你的应用程序的瓶颈,除非你正在处理一个极端内存密集型应用程序,其中一个额外的对象可能是一个交易。 (只是你知道,我去了源代码,发现,第二种方法创建了一个额外的Property
对象)
谈论可读性 - 当然我会选择第一个。因为我要去API看看setCopy()
做了什么。第一个清楚地显示了意图,即请求一个新的DateTime
对象,并将minuteOfHour
设置为传递的值。
这是我不喜欢第二种方法的另一个原因。 minuteOfHour()
方法返回Property
:
Property minuteOfHour = date.minuteOfHour();
现在可以将属性分配给date
的任何属性。我可以稍后再做:
minuteOfHour = date.dayOfYear();
那会编译,但是在不实际更改名称的情况下更改变量的含义。这意味着,当您致电时,您不会真正知道自己要设置的属性:Property#setCopy()
。
答案 1 :(得分:1)
它们可能大致相同 - 这是withMinuteOfHour的源代码 -
public DateTime withMinuteOfHour(int minute) {
return withMillis(getChronology().minuteOfHour().set(getMillis(), minute));
}
虽然minuteOfHour是 -
public Property minuteOfHour() {
return new Property(this, getChronology().minuteOfHour());
}
所以调用的核心是相同的