我们遇到这样一种情况:运行使用1.8.0_092的Java 8应用程序的PC从Locale.getDefault()
返回null。虽然处理这个问题很简单,但我更担心返回null,因为该方法的documentation并不表示null是可能的。我们没有从java命令行设置语言环境,也没有在任何地方调用setDefault()
。
此安装中Locale.getDefault()
将返回null可能出错?我没有正确阅读Java文档吗?
答案 0 :(得分:1)
查看JDK 1.8.0_092的源代码我看到Locale.getDefault()
返回的值来自字段defaultLocale
(Locale.java:2022)。
private volatile static Locale defaultLocale = initDefault();
initDefault()
根据变量LocaleKey
,language
,region
,script
和{{1}构建密钥(country
)然后搜索variant
对象Cache
。
好吧,我不想用其他细节打扰你,但实质上,这段代码在Map中查找给定环境的现有LocaleObjectCache<LocaleKey, Locale>
,因此这样的Locale可能不存在