什么是最便宜的 java Joda DateTime 更新方法?

What is the least expensive java Joda DateTime update method?

我正在寻找更新 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)

它们可能大致相同 - 这是 withMinuteOfHour 的源代码 -

public DateTime withMinuteOfHour(int minute) {
        return withMillis(getChronology().minuteOfHour().set(getMillis(), minute));
}

虽然 minuteOfHour 是 -

public Property minuteOfHour() {
            return new Property(this, getChronology().minuteOfHour());
}

所以调用的核心都是一样的

谈论性能 - 我真的不太在意,因为这 3 行几乎永远不会成为您应用程序的瓶颈,除非您正在处理极端内存密集型应用程序,其中可能有一个额外的对象很重要。 (如你所知,我查看了源代码,发现第二种方法创建了一个额外的 Property 对象)

谈到可读性——当然我会选择第一个。因为我必须去 API 看看 setCopy() 做了什么。第一个清楚地表明了意图,它是请求一个新的 DateTime 对象,并将 minuteOfHour 设置为传递的值。

这是我不喜欢第二种方法的另一个原因。 minuteOfHour()方法returns一个Property:

Property minuteOfHour = date.minuteOfHour();

现在 属性 可以分配给 date 的任何 属性。我可以稍后做:

minuteOfHour = date.dayOfYear();

这会编译,但会更改变量的含义而不实际更改名称。这意味着,当您调用 Property#setCopy().

时,您不会真正知道您设置的是什么 属性