On Fri, 25 Mar 2022 22:51:23 GMT, Naoto Sato <na...@openjdk.org> wrote:

>> Proposing to deprecate the constructors in the `java.util.Locale` class. 
>> There is already a factory method and a builder to return singletons, so 
>> there is no need to have constructors anymore unless one purposefully wants 
>> to create `ill-formed` Locale objects, which is discouraged. We cannot 
>> terminally deprecate those constructors for the compatibility to serialized 
>> objects created with older JDKs. Please see the draft CSR for more detail.
>
> Naoto Sato has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Fixed a build failure

src/java.base/share/classes/java/util/Locale.java line 819:

> 817:      * @since 19
> 818:      */
> 819:     public static Locale of(String... fields) {

Arguably, there should be `Locale.of` overloads taking 0 to 4 arguments, so 
that it’s not necessary to box the fields in a `String` array.

src/java.base/share/classes/java/util/Locale.java line 825:

> 823:             case 2 -> getInstance(fields[0], "", fields[1], "", null);
> 824:             case 3 -> getInstance(fields[0], "", fields[1], fields[2], 
> null);
> 825:             default -> getInstance(fields[0], fields[3], fields[1], 
> fields[2], null);

This should probably throw `IllegalArgumentException` when more than 4 fields 
are passed:
Suggestion:

            case 4 -> getInstance(fields[0], fields[3], fields[1], fields[2], 
null);
            default -> throw new IllegalArgumentException(/* TODO: message */);

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

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

Reply via email to