From: Travis Keep Date: Thu, 28 Mar 2013 21:04:41 +0000 (+0000) Subject: ICU-10017 Do defensive copy of TimeUnitAmount objects in TimePeriod.forAmounts. X-Git-Tag: milestone-59-0-1~2970 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d21588cb603f77ecb261c4914ae71fc3f7e95acf;p=icu ICU-10017 Do defensive copy of TimeUnitAmount objects in TimePeriod.forAmounts. X-SVN-Rev: 33474 --- diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java b/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java index d406b7f7921..5bac6f6dc7b 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java @@ -67,7 +67,10 @@ public final class TimePeriod implements Iterable { throw new IllegalArgumentException( "Only one TimeUnitAmount per unit allowed."); } - fields[index] = tua; + // This line is necessary to guarantee immutability of the TimePeriod + // class. A Number object, which is in TimeUnitAmount, need not be immutable, + // but Double is immutable. + fields[index] = new TimeUnitAmount(tua.getNumber().doubleValue(), tua.getTimeUnit()); size++; } return new TimePeriod(fields, size, computeHash(fields));