Java Calendar.getInstance方法未加载用户定义的区域设置类
在jdk6中 我已经为locale(en,AT)实现了CalendarData_en_AT类,该语言环境是用户定义的语言环境(未在jre中定义)。我看到,当我尝试使用Java Calendar.getInstance方法未加载用户定义的区域设置类,java,calendar,locale,Java,Calendar,Locale,在jdk6中 我已经为locale(en,AT)实现了CalendarData_en_AT类,该语言环境是用户定义的语言环境(未在jre中定义)。我看到,当我尝试使用Calendar.getInstance()方法加载区域设置时,它会加载CalendarData\u en.class 当进一步调试时,我发现它只拾取在LocaleMetaDataInfo类中指定的区域设置 当我们调用Calendar.getInstance(新语言环境(en,AT))时,需要做些什么才能加载CalendarData
Calendar.getInstance()
方法加载区域设置时,它会加载CalendarData\u en.class
当进一步调试时,我发现它只拾取在LocaleMetaDataInfo
类中指定的区域设置
当我们调用Calendar.getInstance(新语言环境(en,AT))
时,需要做些什么才能加载CalendarData\u en\u AT.class
代码如下:
我有一个类CalendarData\u en\u AT.java
public class CalendarData_en_AT extends LocaleNamesBundle{
public CalendarData_en_AT(){
}
protected final Object[][] getContents(){
return
new Object[][] {
new Object[] { "firstDayOfWeek", "2" },
new Object[] { "minimalDaysInFirstWeek", "4" }
};
}
}
编译后的类被封装在一个.jar文件中,并被放置在jre/lib/ext中
现在是我的测试课
如果我调用Calendar.getInstance(新语言环境(“en”,“AT”)).getFirstDayOfWeek()
它应该返回2,但现在它返回1,原因是它加载了由用户实现的
CalendarData\u en.class提供的CalendarData\u en.class
,而不是CalendarData\u en\u AT.class
。
您必须创建符合区域设置敏感服务SPI的提供程序
查看Sun员工提供的有关创建和打包此类提供程序的更多详细信息我已经为用户定义的区域设置实现了Sun.util.resources.CalendarData\u en\uu、Sun.util.resources.CurrencyNames\u en\uu、Sun.util.resources.FormatData\u en\u*类,实现的CurrencyNameProvider调用sun.util.resources.CurrencyNames_en_*类,实现的DecimalFormatSymbolsProvider调用sun.util.resources.FormatData_en_*类,但找不到可以调用sun.util.resources.CalendarData_en_*类的提供程序