Java 8 Locale.getDefault()返回null

时间:2017-05-25 19:24:11

标签: java

我们遇到这样一种情况:运行使用1.8.0_092的Java 8应用程序的PC从Locale.getDefault()返回null。虽然处理这个问题很简单,但我更担心返回null,因为该方法的documentation并不表示null是可能的。我们没有从java命令行设置语言环境,也没有在任何地方调用setDefault()

此安装中Locale.getDefault()将返回null可能出错?我没有正确阅读Java文档吗?

1 个答案:

答案 0 :(得分:1)

查看JDK 1.8.0_092的源代码我看到Locale.getDefault()返回的值来自字段defaultLocale(Locale.java:2022)。

private volatile static Locale defaultLocale = initDefault();

initDefault()根据变量LocaleKeylanguageregionscript和{{1}构建密钥(country)然后搜索variant对象Cache

好吧,我不想用其他细节打扰你,但实质上,这段代码在Map中查找给定环境的现有LocaleObjectCache<LocaleKey, Locale>,因此这样的Locale可能不存在