Spec-Zone.ru › OpenJDK 21

Класс ResourceBundle.Control

java.lang.Object
java.util.ResourceBundle.Control
Enclosing class:
ResourceBundle
public static class ResourceBundle.Control extends Object
ResourceBundle.Control определяет набор методов обратного вызова, которые вызываются методом-фабрикой ResourceBundle.getBundle во время процесса загрузки ресурсов. Другими словами, класс ResourceBundle.Control взаимодействует с методами-фабриками для загрузки ресурсов. Значение по умолчанию методов обратного вызова предоставляет информацию, необходимую методам-фабрикам для выполнения поведения по умолчанию.

ResourceBundle.Control предназначен для приложения, развернутого в модуле без имени, например, для поддержки ресурсов в нестандартных форматах или пакета локализованных ресурсов в нетрадиционной структуре. ResourceBundleProvider является заменой для ResourceBundle.Control при переходе на модули. UnsupportedOperationException будет выброшен, если метод-фабрика, принимающий параметр ResourceBundle.Control, будет вызван.

В дополнение к методам обратного вызова, методы toBundleName и toResourceName определены в основном для удобства при реализации методов обратного вызова. Однако, метод toBundleName можно переопределить для предоставления различных соглашений в организации и упаковке локализованных ресурсов. Метод toResourceName final для предотвращения использования неправильных разделителей имен ресурсов и имен классов.

Два метода-фабрики, getControl(List) и getNoFallbackControl(List), предоставляют экземпляры ResourceBundle.Control, реализующие распространенные вариации процесса загрузки ресурсов по умолчанию.

Форматы, возвращаемые методом getFormats, и кандидаты на локаль, возвращаемые методом getCandidateLocales, должны быть согласованными во всех ResourceBundle.getBundle вызовах для одного базового ресурса. В противном случае, методы ResourceBundle.getBundle могут вернуть нежелательные ресурсы. Например, если метод getFormats возвращает только "java.class" при первом вызове ResourceBundle.getBundle и только "java.properties" при втором вызове, то второй вызов вернет тот, который был кэширован во время первого.

Экземпляр класса ResourceBundle.Control должен быть потокобезопасным, если он одновременно используется несколькими потоками. ResourceBundle.getBundle не выполняет синхронизацию при вызове методов ResourceBundle.Control. Значения по умолчанию методов являются потокобезопасными.

Приложения могут указать экземпляры ResourceBundle.Control , возвращаемые методами-фабриками getControl или созданные из подкласса ResourceBundle.Control , для настройки процесса загрузки ресурсов. Ниже приведены примеры изменения процесса загрузки ресурсов по умолчанию.

Пример 1

Следующий код позволяет ResourceBundle.getBundle искать только ресурсы, основанные на свойствах.

import java.util.*;
import static java.util.ResourceBundle.Control.*;
...
ResourceBundle bundle =
  ResourceBundle.getBundle("MyResources", Locale.forLanguageTag("fr-CH"),
                           ResourceBundle.Control.getControl(FORMAT_PROPERTIES));
Учитывая ресурсы в примере примере в описании ResourceBundle.getBundle, этот вызов ResourceBundle.getBundle загружает MyResources_fr_CH.properties, родитель которого MyResources_fr.properties, родитель которого MyResources.properties. (MyResources_fr_CH.properties не скрыт, но MyResources_fr_CH.class скрыт.)

Пример 2

Следующий пример загрузки ресурсов в формате XML с использованием Properties.loadFromXML.

ResourceBundle rb = ResourceBundle.getBundle("Messages",
    new ResourceBundle.Control() {
        public List<String> getFormats(String baseName) {
            if (baseName == null)
                throw new NullPointerException();
            return Arrays.asList("xml");
        }
        public ResourceBundle newBundle(String baseName,
                                        Locale locale,
                                        String format,
                                        ClassLoader loader,
                                        boolean reload)
                         throws IllegalAccessException,
                                InstantiationException,
                                IOException {
            if (baseName == null || locale == null
                  || format == null || loader == null)
                throw new NullPointerException();
            ResourceBundle bundle = null;
            if (format.equals("xml")) {
                String bundleName = toBundleName(baseName, locale);
                String resourceName = toResourceName(bundleName, format);
                InputStream stream = null;
                if (reload) {
                    URL url = loader.getResource(resourceName);
                    if (url != null) {
                        URLConnection connection = url.openConnection();
                        if (connection != null) {
                            // Disable caches to get fresh data for
                            // reloading.
                            connection.setUseCaches(false);
                            stream = connection.getInputStream();
                        }
                    }
                } else {
                    stream = loader.getResourceAsStream(resourceName);
                }
                if (stream != null) {
                    BufferedInputStream bis = new BufferedInputStream(stream);
                    bundle = new XMLResourceBundle(bis);
                    bis.close();
                }
            }
            return bundle;
        }
    });

...

private static class XMLResourceBundle extends ResourceBundle {
    private Properties props;
    XMLResourceBundle(InputStream stream) throws IOException {
        props = new Properties();
        props.loadFromXML(stream);
    }
    protected Object handleGetObject(String key) {
        return props.getProperty(key);
    }
    public Enumeration<String> getKeys() {
        ...
    }
}
API Note:
ResourceBundle.Control не поддерживается в именованных модулях. Если метод ResourceBundle.getBundle с ResourceBundle.Control вызывается в именованном модуле, метод выбросит исключение UnsupportedOperationException. Любые поставщики сервисов ResourceBundleControlProvider игнорируются в именованных модулях.
Since:
1.6
See Also:
  • ResourceBundleProvider

Краткое описание полей

Модификатор и тип Поле Описание
static final List<String> FORMAT_CLASS
Формат только для класса List, содержащий "java.class".
static final List<String> FORMAT_DEFAULT
Формат по умолчанию List, который содержит строки "java.class" и "java.properties" в этом порядке.
static final List<String> FORMAT_PROPERTIES
Формат только для свойств List , содержащий "java.properties".
static final long TTL_DONT_CACHE
Постоянная для времени жизни, чтобы не кэшировать экземпляры загруженных ресурсов.
static final long TTL_NO_EXPIRATION_CONTROL
Постоянная для отключения управления истечением срока действия для загруженных экземпляров ресурсов в кэше.

Краткое описание конструкторов

Control()
Модификатор Конструктор Описание
protected
Единственный конструктор.

Краткое описание методов

Модификатор и тип Метод Описание
List<Locale> getCandidateLocales(String baseName, Locale locale)
Возвращает List из Locale в качестве кандидатов на локаль для baseName и locale.
static final ResourceBundle.Control getControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанный formats.
Locale getFallbackLocale(String baseName, Locale locale)
Возвращает Locale для использования в качестве локальной fallback для дальнейшего поиска ресурсов методом ResourceBundle.getBundle.
List<String> getFormats(String baseName)
Возвращает List из String, содержащий форматы для загрузки ресурсов для указанного baseName.
static final ResourceBundle.Control getNoFallbackControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанный formats , а метод getFallbackLocale возвращает null.
long getTimeToLive(String baseName, Locale locale)
Возвращает значение времени жизни (TTL) для ресурсов, которые загружаются с помощью этого ResourceBundle.Control.
boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime)
Определяет, нужно ли перезагружать истекшие bundle в кэше на основе времени загрузки, указанного в loadTime, или по другим критериям.
ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
Создаёт экземпляр ресурса для данного имени ресурса, формата и локали, используя указанный загрузчик классов при необходимости.
String toBundleName(String baseName, Locale locale)
Преобразует указанное baseName и locale в имя ресурса.
final String toResourceName(String bundleName, String suffix)
Преобразует указанное bundleName в форму, необходимую для метода ClassLoader.getResource, заменяя все вхождения '.' в bundleName на '/' и добавляя '.' и указанное имя файла suffix.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание полей

FORMAT_DEFAULT

public static final List<String> FORMAT_DEFAULT
Формат по умолчанию List, содержащий строки "java.class" и "java.properties", в этом порядке. Этот List не изменяется.
См. также:
  • getFormats(String)

FORMAT_CLASS

public static final List<String> FORMAT_CLASS
Формат только для класса List содержащий "java.class". Этот List не изменяется.
См. также:
  • getFormats(String)

FORMAT_PROPERTIES

public static final List<String> FORMAT_PROPERTIES
Формат только для свойств List содержащий "java.properties". Этот List не изменяется.
См. также:
  • getFormats(String)

TTL_DONT_CACHE

public static final long TTL_DONT_CACHE
Постоянная времени жизни для отказа от кэширования загруженных экземпляров ресурсных пакетов.
См. также:
  • getTimeToLive(String, Locale)
  • Значения постоянных полей

TTL_NO_EXPIRATION_CONTROL

public static final long TTL_NO_EXPIRATION_CONTROL
Постоянная времени жизни для отключения контроля истечения срока действия загруженных экземпляров ресурсных пакетов в кэше.
См. также:
  • getTimeToLive(String, Locale)
  • Значения постоянных полей

Подробное описание конструкторов

Control

protected Control()
Единственный конструктор. (Для вызова подклассами, как правило, неявный.)

Подробное описание методов

getControl

public static final ResourceBundle.Control getControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанные formats. formats должен быть равен одному из FORMAT_PROPERTIES, FORMAT_CLASS или FORMAT_DEFAULT. Экземпляры ResourceBundle.Control , возвращаемые этим методом, являются синглетонами и потокобезопасными.

Указание FORMAT_DEFAULT эквивалентно созданию экземпляра класса ResourceBundle.Control, за исключением того, что этот метод возвращает синглетон.

Параметры:
formats - форматы, которые должен возвращать метод ResourceBundle.Control.getFormats
Возвращает:
ResourceBundle.Control поддерживающий указанные formats
Издаёт:
NullPointerException - если formats является null
IllegalArgumentException - если formats неизвестен

getNoFallbackControl

public static final ResourceBundle.Control getNoFallbackControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанные formats , а метод getFallbackLocale возвращает null. formats должен быть равен одному из FORMAT_PROPERTIES, FORMAT_CLASS или FORMAT_DEFAULT. Экземпляры ResourceBundle.Control , возвращаемые этим методом, являются синглетонами и потокобезопасными.
Параметры:
formats - форматы, которые должен возвращать метод ResourceBundle.Control.getFormats
Возвращает:
ResourceBundle.Control поддерживающий указанные formats без поддержки обратного вызова Locale
Издаёт:
NullPointerException - если formats является null
IllegalArgumentException - если formats неизвестен

getFormats

public List<String> getFormats(String baseName)
Возвращает List String , содержащий форматы, используемые для загрузки ресурсных пакетов для данного baseName. Фабричный метод ResourceBundle.getBundle пытается загрузить ресурсные пакеты с форматами в порядке, указанном в списке. Возвращаемый этим методом список должен содержать как минимум один String. Предопределённые форматы — "java.class" для ресурсных пакетов на основе классов и "java.properties" для основанных на свойствах. Строки, начинающиеся с "java." , зарезервированы для будущих расширений и не должны использоваться приложением для определения форматов.

Требования к возвращаемому List в неизменяемом (unmodifiable) виде не предъявляется. Однако, возвращаемый List не должен изменяться после возвращения методом getFormats.

По умолчанию реализация возвращает FORMAT_DEFAULT, чтобы фабричный метод ResourceBundle.getBundle сначала искал ресурсные пакеты на основе классов, а затем на основе свойств.

Параметры:
baseName - имя базового ресурсного пакета, полное имя класса
Возвращает:
List String содержащий форматы загрузки ресурсных пакетов.
Издаёт:
NullPointerException - если baseName равно null
См. также:
  • FORMAT_DEFAULT
  • FORMAT_CLASS
  • FORMAT_PROPERTIES

getCandidateLocales

public List<Locale> getCandidateLocales(String baseName, Locale locale)
Возвращает список кандидатов List Locale в качестве кандидатов на локаль для baseName и locale. Этот метод вызывается фабричным методом ResourceBundle.getBundle каждый раз, когда фабричный метод пытается найти ресурсный пакет для целевой Locale.

Последовательность кандидатов на локаль также соответствует пути поиска ресурсов во время выполнения (также известному как цепь предков), если соответствующие ресурсные пакеты для кандидатов на локаль существуют и их предки не определены загруженными ресурсными пакетами. Последний элемент списка должен быть корневой локалью, если требуется, чтобы базовый пакет был конечной точкой цепи предков.

Если заданная локаль равна Locale.ROOT (корневая локаль), должен быть возвращен список List, содержащий только корневую Locale. В этом случае фабричный метод ResourceBundle.getBundle загружает только базовый пакет в качестве результирующего ресурсного пакета.

Не требуется возвращать неизменяемый (немодифицируемый) List. Однако возвращенная List не должна изменяться после возврата getCandidateLocales.

Реализация по умолчанию возвращает список List, содержащий Locale с использованием описанных ниже правил. В описании ниже, L, S, C и V соответственно представляют непустой язык, скрипт, страну и вариант. Например, [L, C] представляет Locale, имеющий непустые значения только для языка и страны. Форма L("xx") означает, что значение языка (непустое) равно "xx". Во всех случаях Locale с пустыми значениями конечных компонентов опускаются.

  1. Для входной Locale с пустым значением скрипта добавляются кандидаты Locale путем поочередного удаления конечного компонента, как показано ниже:
    • [L, C, V]
    • [L, C]
    • [L]
    • Locale.ROOT
  2. Для входной Locale с непустым значением скрипта добавляются кандидаты Locale путем поочередного удаления конечного компонента до языка, затем добавляются кандидаты, сгенерированные из Locale с восстановленными страной и вариантом:
    • [L, S, C, V]
    • [L, S, C]
    • [L, S]
    • [L, C, V]
    • [L, C]
    • [L]
    • Locale.ROOT
  3. Для входной Locale со значением варианта, состоящим из нескольких подтегов, разделенных нижним подчеркиванием, генерируются кандидаты Locale путем поочередного удаления подтегов варианта, затем они вставляются после каждого вхождения Locale с полным значением варианта в исходном списке. Например, если вариант состоит из двух подтегов V1 и V2:
    • [L, S, C, V1, V2]
    • [L, S, C, V1]
    • [L, S, C]
    • [L, S]
    • [L, C, V1, V2]
    • [L, C, V1]
    • [L, C]
    • [L]
    • Locale.ROOT
  4. Специальные случаи для китайского языка. Когда входная Locale имеет язык "zh" (китайский) и пустое значение скрипта, могут быть заданы либо "Hans" (упрощенный), либо "Hant" (традиционный), в зависимости от страны. Когда страна "CN" (Китай) или "SG" (Сингапур), задается "Hans". Когда страна "HK" (Гонконг), "MO" (Макао) или "TW" (Тайвань), задается "Hant". Для всех остальных стран или когда страна пустая, скрипт не задается. Например, для Locale("zh", "CN") , список кандидатов будет:
    • [L("zh"), S("Hans"), C("CN")]
    • [L("zh"), S("Hans")]
    • [L("zh"), C("CN")]
    • [L("zh")]
    • Locale.ROOT
    Для Locale("zh", "TW"), список кандидатов будет:
    • [L("zh"), S("Hant"), C("TW")]
    • [L("zh"), S("Hant")]
    • [L("zh"), C("TW")]
    • [L("zh")]
    • Locale.ROOT
  5. Специальные случаи для норвежского языка. Оба Locale("no", "NO", "NY") и Locale("nn", "NO") представляют норвежский нюнорск. Когда язык локали "nn", генерируется стандартный список кандидатов до [L("nn")], а затем добавляются следующие кандидаты:
    • [L("no"), C("NO"), V("NY")]
    • [L("no"), C("NO")]
    • [L("no")]
    • Locale.ROOT
    Если локаль точно Locale("no", "NO", "NY"), она сначала преобразуется в Locale("nn", "NO"), а затем выполняется описанная выше процедура.

    Также Java рассматривает язык "no" как синоним норвежского букмоль "nb". За исключением единственного случая Locale("no", "NO", "NY") (обработанного выше), когда у входной Locale язык "no" или "nb", кандидаты Locale с кодами языка "no" и "nb" чередуются, сначала используя запрашиваемый язык, а затем его синоним. Например, Locale("nb", "NO", "POSIX") генерирует следующий список кандидатов:

    • [L("nb"), C("NO"), V("POSIX")]
    • [L("no"), C("NO"), V("POSIX")]
    • [L("nb"), C("NO")]
    • [L("no"), C("NO")]
    • [L("nb")]
    • [L("no")]
    • Locale.ROOT
    Locale("no", "NO", "POSIX") сгенерирует тот же список, за исключением того, что локали с "no" будут появляться раньше соответствующих локалей с "nb".

Реализация по умолчанию использует ArrayList, которую реализации с переопределением могут изменить перед возвратом вызывающему методу. Однако подкласс не должен изменять его после возврата getCandidateLocales.

Например, если заданная baseName - "Messages", а заданная locale - Locale("ja", "", "XX"), то List Locale:

     Locale("ja", "", "XX")
     Locale("ja")
     Locale.ROOT
 
возвращается. И если ресурсные пакеты для "ja" и "" Locale найдены, то путь поиска ресурсов во время выполнения (цепь предков) будет:

     Messages_ja -> Messages
 
Parameters:
baseName - базовое имя ресурсного пакета, полное имя класса
locale - локаль, для которой требуется ресурсный пакет
Returns:
список кандидатов на Locale для данной locale
Throws:
NullPointerException - если baseName или locale null

getFallbackLocale

public Locale getFallbackLocale(String baseName, Locale locale)
Возвращает локаль, используемую в качестве резервной для дальнейшего поиска ресурсных пакетов фабричным методом ResourceBundle.getBundle. Этот метод вызывается из фабричного метода каждый раз, когда не удается найти результирующий ресурсный пакет для baseName и locale, где локаль - либо параметр для ResourceBundle.getBundle, либо предыдущая резервная локаль, возвращенная этим методом.

Метод возвращает null если дальнейший поиск по умолчанию не требуется.

Реализация по умолчанию возвращает стандартную Locale, если заданная locale не является стандартной. В противном случае возвращается null.

Parameters:
baseName - базовое имя ресурсного пакета, полное имя класса, для которого ResourceBundle.getBundle не смог найти никаких ресурсных пакетов (кроме базового)
locale - Locale, для которой ResourceBundle.getBundle не смог найти никаких ресурсных пакетов (кроме базового)
Returns:
резервную локаль для дальнейшего поиска или null, если дальнейший поиск по умолчанию не требуется.
Throws:
NullPointerException - если baseName или locale null

newBundle

public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException
Создаёт экземпляр ресурсного пакета для заданного имени пакета, формата и локали, используя указанный загрузчик классов при необходимости. Этот метод возвращает null если для заданных параметров нет доступного ресурсного пакета. Если ресурсный пакет не может быть создан из-за непредвиденной ошибки, ошибка должна быть сообщена путём выброса исключения Error или Exception, а не простым возвращением null.

Если флаг reload имеет значение true, это указывает, что этот метод вызывается, потому что ранее загруженный ресурсный пакет истек.

Требования к реализации:
Ресурсные пакеты в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Ресурсный пакет в именованном модуле, видимом для данного загрузчика классов, доступен, когда пакет файла ресурса, соответствующего ресурсному пакету, открыт безусловно.

По умолчанию реализация создаёт экземпляр ResourceBundle следующим образом.

  • Имя пакета получается вызовом toBundleName(baseName, locale).
  • Если format имеет значение "java.class", то класс Class, указанный именем пакета, загружается с помощью данного загрузчика классов. Если Class найден и доступен, то создаётся экземпляр ResourceBundle. Ресурсный пакет доступен, если пакет файла класса пакета открыт безусловно; в противном случае, будет брошено исключение IllegalAccessException. Обратите внимание, что флаг reload игнорируется при загрузке ресурсных пакетов на основе классов в этой реализации по умолчанию.
  • Если format имеет значение "java.properties", вызывается toResourceName(bundlename, "properties") для получения имени ресурса. Если reload имеет значение true, вызывается load.getResource для получения URL для создания URLConnection. Этот URLConnection используется для отключения кэшей базовых слоёв загрузки ресурсов и для получения потока данных. В противном случае вызывается loader.getResourceAsStream для получения InputStream. Затем создаётся PropertyResourceBundle с InputStream.
  • Если format ни "java.class", ни "java.properties", выбрасывается исключение IllegalArgumentException.
  • Если язык locale является одним из Старых и новых кодов языков, то при необходимости повторяется процесс загрузки с другим языком в имени пакета. Например, "iw" для "he" и наоборот.
Параметры:
baseName - основное имя пакета ресурса, полное имя класса
locale - локаль, для которой должен быть создан ресурсный пакет
format - формат ресурсного пакета, который необходимо загрузить
loader - ClassLoader для загрузки пакета
reload - флаг, указывающий на повторную загрузку; true если перезагружается истекший ресурсный пакет, false в противном случае
Возвращаемое значение:
экземпляр ресурсного пакета или null если пакет не найден.
Исключения:
NullPointerException - если bundleName, locale, format, или loader имеет значение null, или если null возвращается методом toBundleName
IllegalArgumentException - если format неизвестно или если найденный ресурс для заданных параметров содержит некорректные данные.
ClassCastException - если загруженный класс нельзя привести к типу ResourceBundle
IllegalAccessException - если класс или его конструктор без параметров недоступен.
InstantiationException - если создание экземпляра класса не удалось по другим причинам.
ExceptionInInitializerError - если инициализация, вызванная этим методом, не удалась.
SecurityException - Если присутствует менеджер безопасности, и создание новых экземпляров запрещено. Подробности см. в Class.newInstance().
IOException - если произошла ошибка при чтении ресурсов с помощью операций ввода-вывода.
См. также:
  • ResourceBundleProvider.getBundle(String, Locale)

getTimeToLive

public long getTimeToLive(String baseName, Locale locale)
Возвращает значение времени жизни (TTL) для ресурсных пакетов, загруженных в этом ResourceBundle.Control. Положительные значения времени жизни указывают количество миллисекунд, в течение которого пакет может храниться в кэше, не проверяясь на соответствие исходным данным, из которых он был создан. Значение 0 указывает, что пакет должен проверяться каждый раз при извлечении из кэша. TTL_DONT_CACHE указывает, что загруженные ресурсные пакеты не помещаются в кэш. TTL_NO_EXPIRATION_CONTROL указывает, что загруженные ресурсные пакеты помещаются в кэш без контроля истечения срока действия.

Истечение срока действия влияет только на процесс загрузки пакета методом-фабрикой ResourceBundle.getBundle. То есть, если метод-фабрика находит в кэше ресурсный пакет, срок действия которого истек, метод-фабрика вызывает метод needsReload для определения необходимости его повторной загрузки. Если needsReload возвращает true, экземпляр кэшированного ресурсного пакета удаляется из кэша. В противном случае экземпляр остаётся в кэше, обновлённый новым значением TTL, возвращённым этим методом.

Все кэшированные ресурсные пакеты могут быть удалены из кэша из-за ограничений памяти среды выполнения. Возвращение большого положительного значения не означает блокировки загруженных ресурсных пакетов в кэше.

Реализация по умолчанию возвращает TTL_NO_EXPIRATION_CONTROL.

Параметры:
baseName - базовое имя ресурсного пакета, для которого задаётся значение срока действия.
locale - локаль ресурсного пакета, для которого задаётся значение срока действия.
Возвращаемое значение:
время (0 или положительное смещение в миллисекундах от кэшированного времени) для истечения срока действия загруженных пакетов в кэше, TTL_NO_EXPIRATION_CONTROL для отключения контроля истечения срока действия или TTL_DONT_CACHE для отключения кэширования.
Исключения:
NullPointerException - если baseName или locale имеет значение null

needsReload

public boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime)
Определяет, нужно ли перезагружать истекший bundle в кэше, основываясь на времени загрузки, заданном loadTime, или на каких-либо других критериях. Метод возвращает true если перезагрузка требуется; false в противном случае. loadTime — это смещение в миллисекундах с момента эпохи Calendar эпохи.

Вызывающий метод-фабрика ResourceBundle.getBundle вызывает этот метод на экземпляре ResourceBundle.Control используемом в текущем вызове, а не на экземпляре, используемом в вызове, который изначально загрузил ресурсный пакет.

Реализация по умолчанию сравнивает loadTime и время последнего изменения исходных данных ресурсного пакета. Если определяется, что исходные данные были изменены с момента loadTime, возвращается true. В противном случае возвращается false. Эта реализация предполагает, что заданный format является той же строкой, что и его расширение файла, если это не один из стандартных форматов, "java.class" или "java.properties".

Параметры:
baseName - базовое имя ресурсного пакета, полное имя класса
locale - локаль ресурсного пакета
format - формат ресурсного пакета
loader - ClassLoader для загрузки пакета
bundle - экземпляр ресурсного пакета, истекшего в кэше
loadTime - время, когда bundle был загружен и помещён в кэш
Возвращаемое значение:
true если истекший пакет нуждается в перезагрузке; false в противном случае.
Исключения:
NullPointerException - если baseName, locale, format, loader, или bundle имеет значение null

toBundleName

public String toBundleName(String baseName, Locale locale)
Преобразует заданное baseName и locale в имя набора. Этот метод вызывается из реализации по умолчанию метода newBundle и needsReload методов.

Эта реализация возвращает следующее значение:

     baseName + "_" + language + "_" + script + "_" + country + "_" + variant
 
где language, script, country, и variant — значения языка, сценария, страны и варианта locale, соответственно. Конечные значения компонентов, которые являются пустыми строками, опускаются вместе с предшествующим '_'. Если значение сценария пустое, значение сценария опускается вместе с предшествующим '_'. Если все значения являются пустыми строками, то возвращается baseName.

Например, если baseName равно "baseName" и locale равно Locale("ja", "", "XX"), то возвращается "baseName_ja_ _XX". Если заданный locale равен Locale("en"), то возвращается "baseName_en".

Переопределение этого метода позволяет приложениям использовать различные соглашения при организации и упаковке локализованных ресурсов.

Parameters:
baseName - базовое имя набора ресурсов, полное имя класса
locale - locale для загрузки набора ресурсов
Returns:
имя набора для набора ресурсов
Throws:
NullPointerException - если baseName или locale равно null
See Also:
  • AbstractResourceBundleProvider.toBundleName(String, Locale)

toResourceName

public final String toResourceName(String bundleName, String suffix)
Преобразует заданное bundleName в формат, требуемый методом ClassLoader.getResource, заменяя все вхождения '.' в bundleName на '/' и добавляя '.' и заданный тип файла suffix. Например, если bundleName равно "foo.bar.MyResources_ja_JP" и suffix равно "properties", то возвращается "foo/bar/MyResources_ja_JP.properties".
Parameters:
bundleName - имя набора
suffix - суффикс типа файла
Returns:
преобразованное имя ресурса
Throws:
NullPointerException - если bundleName или suffix равно null

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/ResourceBundle.Control.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API