但是我无法弄清楚为什么只有法国,加拿大,中国和美国等某些国家/地区以及意大利语,日语和德语等某些语言的语言区域具有常量。
每当需要语言环境时,我都会查询支持的语言环境表,并使用Strings执行以下操作:
Locale locale = new Locale("pt", "BR");
Run Code Online (Sandbox Code Playgroud)
为什么只将某些语言环境作为常量?
是否有Java库可为语言环境提供常量?
为什么只将某些语言环境作为常量?
的javadoc对Locale常量进行了这样的说明:
“ Locale类提供了许多方便的常量,您可以使用它们为常用的语言环境创建Locale对象。”
明显的含义是,Locale尚未为其他国家和语言定义常量,因为当时认为语言环境在Java程序中“不太常用”。或至少不够普遍,不足以保证添加相应的常数。(我不知道这个决定是基于客观证据还是直觉。)
请注意,添加更多Locale常量会带来性能开销。更不用说由于国家更改名称等引起的各种兼容性问题。因此,基本上,他们必须停在某个地方……而当前集就是他们停在的地方。
还要注意的另一件事是,这些常数只是一个方便。即一种简单的获取Locale对象的方法,您总是可以通过其他方式获得它;例如通过使用Locale构造函数或通过调用Locale.lookup(...)。
是否有Java库可为语言环境提供常量?
AFAIK,不。由于上述原因,在我看来这是个坏主意。
而且,当然,您始终可以定义自己的类,其中包含对您的应用程序方便的Locale常量。
作为记录,我在Java Bug数据库(在Google缓存中)中找到了与此相关的RFE:
JDK-4399080:RFE:java.util.Locale.SPANISH和java.util.Locale.SPAIN不存在
该RFE是针对Java 1.3.0进行报告的,并通过以下评估被关闭为“无法修复”:
我们不久前决定不添加更多预定义的语言环境常量。这是很容易写
new Locale("es");或者new Locale("es", "ES");所以有增加更多的常量没有实际的好处-特别是因为它是不可行的覆盖所有的语言和国家。norbert.lindenberg@Eng 2001-01-05