On Thu, 24 Mar 2022 22:01:30 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.

Specs looks good, with minor modifications. I'm not so sure about replacement 
of the constructors with string concatenation with ternary operators; see my 
other comment.

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

> 250:  * <p>The {@code Locale} class provides a number of convenient constants
> 251:  * that you can use to obtain {@code Locale} objects for commonly used
> 252:  * locales. For example, the following obtains a {@code Locale} object

I'd replace this part (and the example below) with something like,

    For example, {@code Locale.US} is the {@code Locale} object for the United 
States.

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

> 2509:      * constructors, the {@code Builder} checks if a value configured 
> by a
> 2510:      * setter satisfies the syntax requirements defined by the {@code 
> Locale}
> 2511:      * class.  A {@code Locale} object obtained by a {@code Builder} is

...obtained from a Builder...

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

> 2524:      *
> 2525:      * <p>The following example shows how to obtain a {@code Locale} 
> object
> 2526:      * with the {@code Builder}.

...shows how to obtain a Locale object using a Builder.

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

> 2658:          *
> 2659:          * <p>The country value in the {@code Locale} obtained by the
> 2660:          * {@code Builder} is always normalized to upper case.

...obtained from a Builder...

src/java.base/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java
 line 375:

> 373:                         (locale.getLanguage().isEmpty() ? "und" : 
> locale.getLanguage()) +
> 374:                         (locale.getCountry().isEmpty() ? "" : "-" + 
> locale.getCountry()) +
> 375:                         (locale.getVariant().isEmpty() ? "" : 
> "-x-lvariant-" + locale.getVariant()));

It seems like this snippet (and ones very similar to it) are repeated several 
times throughout the JDK code as replacements for the two- and three-arg 
constructors. This seems like a fair increase in complexity, and the use of 
"und" and "-x-lvariant-" are quite non-obvious. Would we recommend that third 
party code that uses the Locale constructors replace them with this snippet? Is 
there something better that we can provide?

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

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

Reply via email to