在java.time.Periodclass中,withDays()、withMonths()、withYears()的作用是什么
In java.time.Period class, what are the purposes of withDays(), withMonths(), withYears()
我注意到 java.time.Period class 包含一些实例方法,它们的行为与可用的静态工厂方法相同。
.withDays()
与 Period.ofDays()
的行为相同
.withMonths()
与 Period.ofMonths()
的行为相同
.withYears()
与 Period.ofYears()
的行为相同
这些实例方法令人困惑,因为它们创建了一个新的 Period 并 return 它们,但没有考虑调用它们的 Period 的状态。
Period p = Period.ofWeeks(3);
p = p.withDays(2);
这似乎合乎逻辑 return 3 周零 2 天,但 return 只有 2 天。这与我调用 Period.ofDays(2)
一样。
此外,还有其他五个没有类似实例方法的静态工厂方法。
那么,这三个实例方法存在的原因是什么?如果是这样,用例是什么?
你做出了一个不幸的测试选择,基本上 - "weeks" 不是一个独立的单位;这只是 7 天的 shorthand。来自 ofWeeks
的文档:
The resulting period will be day-based, with the amount of days equal to the number of weeks multiplied by 7. The years and months units will be zero.
当您随后调用 withDays
时,这实际上是 "overwriting" 结果中的天数,从 21 天变为 2 天。
所以试试这个:
Period p = Period.ofMonths(3);
p = p.withDays(2);
现在将 3 个月零 2 天。
在java-8 new Date API中,这可能是一个规则,以of
开头的方法表示创建或新建一个Object,通常是静态方法,并且该方法start with with
表示修改一些属性,通常是一个对象方法。
所以Period.ofDays(2)
表示创建一个Period属性days为2,但是withDays(2)
表示修改一个Period属性days为新值2.
他们有不同的作用。
我注意到 java.time.Period class 包含一些实例方法,它们的行为与可用的静态工厂方法相同。
.withDays()
与Period.ofDays()
的行为相同
.withMonths()
与Period.ofMonths()
的行为相同
.withYears()
与Period.ofYears()
的行为相同
这些实例方法令人困惑,因为它们创建了一个新的 Period 并 return 它们,但没有考虑调用它们的 Period 的状态。
Period p = Period.ofWeeks(3);
p = p.withDays(2);
这似乎合乎逻辑 return 3 周零 2 天,但 return 只有 2 天。这与我调用 Period.ofDays(2)
一样。
此外,还有其他五个没有类似实例方法的静态工厂方法。
那么,这三个实例方法存在的原因是什么?如果是这样,用例是什么?
你做出了一个不幸的测试选择,基本上 - "weeks" 不是一个独立的单位;这只是 7 天的 shorthand。来自 ofWeeks
的文档:
The resulting period will be day-based, with the amount of days equal to the number of weeks multiplied by 7. The years and months units will be zero.
当您随后调用 withDays
时,这实际上是 "overwriting" 结果中的天数,从 21 天变为 2 天。
所以试试这个:
Period p = Period.ofMonths(3);
p = p.withDays(2);
现在将 3 个月零 2 天。
在java-8 new Date API中,这可能是一个规则,以of
开头的方法表示创建或新建一个Object,通常是静态方法,并且该方法start with with
表示修改一些属性,通常是一个对象方法。
所以Period.ofDays(2)
表示创建一个Period属性days为2,但是withDays(2)
表示修改一个Period属性days为新值2.
他们有不同的作用。