<i18n dev> RFR: 8268469: Update java.time to use switch expressions

Daniel Fuchs dfuchs at openjdk.java.net
Wed Jun 9 17:05:16 UTC 2021


On Wed, 9 Jun 2021 15:41:59 GMT, Patrick Concannon <pconcannon at openjdk.org> wrote:

> Hi,
> 
> Could someone please review my code for updating the code in the `java.time` packages to make use of the switch expressions?
> 
> Kind regards,
> Patrick

src/java.base/share/classes/java/time/Month.java line 491:

> 489:             case OCTOBER   -> 274 + leap;
> 490:             case NOVEMBER  -> 305 + leap;
> 491:             default -> 335 + leap;

It would be better to keep `DECEMBER` here for clarity - even if only in a comment - e.g:


   case NOVEMBER  -> 305 + leap;
   // otherwise (DECEMBER)
   default        -> 335 + leap;

src/java.base/share/classes/java/time/chrono/ThaiBuddhistDate.java line 334:

> 332: 
> 333:                 default -> with(isoDate.with(field, newValue));
> 334:             };

My preference would be to keep the imbricated switch structure: it is not obvious whether this change is correct. Have you verified that `getChronology().range(chronoField).checkValidIntValue(newValue, chronoField);` is a no op when chronoField == ERA?

src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java line 4992:

> 4990:                 }
> 4991:                 default -> throw new IllegalStateException("unreachable");
> 4992:             };

Not sure I like the new version more than the old, as it seems to lead to more duplication.
Maybe the 'Y' case should be tested before entering the switch - then the switch could be used to assign 
`var field = switch (chr) {...};`

-------------

PR: https://git.openjdk.java.net/jdk/pull/4433


More information about the i18n-dev mailing list