这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
本节介绍了使用ListResourceBundle
对象的示例程序ListDemo
。下面的文本解释了创建ListDemo
程序以及支持它的ListResourceBundle
子类的每个步骤。
ListResourceBundle
由类文件支持。因此,第一步是为每个支持的Locale
创建一个类文件。在ListDemo
程序中,ListResourceBundle
的基本名称是StatsBundle
。由于ListDemo
支持三个Locale
对象,因此需要以下三个类文件:
StatsBundle_en_CA.class StatsBundle_fr_FR.class StatsBundle_ja_JP.class
下面的源代码中定义了日本的StatsBundle
类。请注意,类名是通过将语言和国家代码附加到ListResourceBundle
的基本名称来构建的。在类内部,二维contents
数组用键值对初始化。键是每对中的第一个元素:GDP
、Population
和Literacy
。键必须是String
对象,并且在StatsBundle
集合中的每个类中都必须相同。值可以是任何类型的对象。在此示例中,值是两个Integer
对象和一个Double
对象。
import java.util.*; public class StatsBundle_ja_JP extends ListResourceBundle { public Object[][] getContents() { return contents; } private Object[][] contents = { { "GDP", new Integer(21300) }, { "Population", new Integer(125449703) }, { "Literacy", new Double(0.99) }, }; }
ListDemo
程序如下定义Locale
对象:
Locale[] supportedLocales = { new Locale("en", "CA"), new Locale("ja", "JP"), new Locale("fr", "FR") };
每个Locale
对象对应一个StatsBundle
类。例如,用ja
和JP
代码定义的日本Locale
与StatsBundle_ja_JP.class
相匹配。
要创建ListResourceBundle
,调用getBundle
方法。以下代码指定了类的基本名称(StatsBundle
)和Locale
:
ResourceBundle stats = ResourceBundle.getBundle("StatsBundle", currentLocale);
getBundle
方法会搜索以 StatsBundle
开头,并跟随指定 Locale
的语言和国家代码的类。如果 currentLocale
是使用 ja
和 JP
代码创建的,getBundle
方法会返回与类 StatsBundle_ja_JP
对应的 ListResourceBundle
,例如。
现在程序有了适合的 ListResourceBundle
,可以通过它们的键获取本地化对象。下面的代码行通过使用 Literacy
键参数调用 getObject
来检索识字率。由于 getObject
返回一个对象,需要将其强制转换为 Double
类型:
Double lit = (Double)stats.getObject("Literacy");
ListDemo
程序会打印使用 getBundle
方法获取的数据:
Locale = en_CA GDP = 24400 Population = 28802671 Literacy = 0.97 Locale = ja_JP GDP = 21300 Population = 125449703 Literacy = 0.99 Locale = fr_FR GDP = 20200 Population = 58317450 Literacy = 0.99