Метод Calendar.getInstance не загружает определенные пользователем языковые классы - PullRequest
0 голосов
/ 03 января 2011

В JDK 6

Я реализовал класс CalendarData_en_AT для языкового стандарта (en, AT), который является пользовательским языком (не определенным в jre). Я вижу, что когда я пытаюсь загрузить локаль, используя метод Calendar.getInstance(), он загружает CalendarData_en.class

При дальнейшей отладке я обнаружил, что он выбирает только локали, указанные в LocaleMetaDataInfo class

Что нужно сделать, чтобы при вызове Calendar.getInstance(new Locale(en, AT)) он загружался CalendarData_en_AT.class

Код ниже:

У меня есть класс CalendarData_en_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(new Locale("en","AT")).getFirstDayOfWeek()

он должен вернуть 2, но на данный момент он возвращает 1, причина в том, что он загружает CalendarData_en.class предоставить, а не CalendarData_en_AT.class, который реализован пользователем

1 Ответ

0 голосов
/ 03 января 2011

Не уверен, что вы действительно можете сделать это для класса Calendar. Вам нужно будет создать поставщика, соответствующего SPI Locale Sensitive Services.

Посмотрите на эту запись в блоге от сотрудника Sun для получения дополнительной информации о создании и упаковке такого поставщика

...