2017-05-25 13 views
6

1.8.0_092を使用するJava 8アプリケーションを実行しているPCがLocale.getDefault()からnullを戻している場合があります。これを扱うのは簡単ですが、メソッドのためのdocumentationはnullが可能であることを示していないので、nullが戻されていることをより心配しています。 javaコマンドラインからロケールを設定するのではなく、どこでもsetDefault()を呼び出していません。Java 8 Locale.getDefault()nullを返す

このインストールでは、Locale.getDefault()がnullを返すのは間違っていますか? Javaのマニュアルを正しく読んでいないのですか?

+0

システムに関する情報は役に立ちます –

+1

'public static void main(String [] args){System.out.println(Locale.getDefault());}'これが**クリーン**環境?私は再現することができません - 私はあなたの実行時環境に固有の何かを強く想定しています。 –

+0

いつでもJavaソースファイルを開いてそこにブレークポイントを置いて、何が起こっているのかを見ることができます。オープンロケールのソースコードは、getDefaultにブレークポイントを置き、コールスタックに従います。 – tsolakp

答えて

1

JDK 1.8.0_092のソースコードを見ると、Locale.getDefault()によって返される値がフィールドdefaultLocale(Locale.java:2022)になっています。

private volatile static Locale defaultLocale = initDefault(); 

initDefault()は、その後、変数languageregionscriptcountryvariantに基づいてキー(LocaleKey)、LocaleObjectCache<LocaleKey, Locale>あるCacheオブジェクトに検索を構築します。

他の詳細については気にしませんが、本質的には、このコードでは、指定された環境のために既存のLocaleKeyがマップ内に存在するため、そのようなロケールは存在しない可能性があります。

関連する問題