Spec-Zone.ru › OpenJDK 25

Класс ResourceBundle.Control

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

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

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

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

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

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

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

Пример 1

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

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:
ResourceBundle.Control не поддерживается в именованных модулях. Если в именованном модуле вызывается метод ResourceBundle.getBundle с параметром ResourceBundle.Control, метод выбросит исключение UnsupportedOperationException. Любые поставщики служб ResourceBundleControlProvider в именованных модулях игнорируются.
Начиная с версии:
1.6
См. также:
  • 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
Формат только для 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, который фабричный метод 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.

Методы, объявленные в классе 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 не обязательно. Однако возвращённый 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
. Если найдены ресурсные пакеты для Locale "ja" и "", путь поиска ресурсов во время выполнения (цепочка родителей) будет таким:
    Messages_ja -> Messages
Параметры:
baseName — базовое имя ресурсного пакета, полное имя класса
locale — локаль, для которой требуется ресурсный пакет
Возвращает:
List возможных Localeов для заданной locale
Исключения:
NullPointerException — если baseName или locale равен null

getFallbackLocale

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

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

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

Параметры:
baseName — базовое имя ресурсного пакета, полное имя класса, для которого ResourceBundle.getBundle не удалось найти ресурсные пакеты (кроме базового пакета)
locale — Locale, для которой ResourceBundle.getBundle не удалось найти ресурсные пакеты (кроме базового пакета)
Возвращает:
Locale для поиска с резервной локалью или null, если дальнейший поиск с резервной локалью не требуется.
Исключения:
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 используется, чтобы отключить кэширование на нижележащих уровнях загрузки ресурсов и получить InputStream. В противном случае вызывается 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 либо если метод toBundleName возвращает null
IllegalArgumentException — если format неизвестен либо найденный для заданных параметров ресурс содержит некорректные данные.
ClassCastException — если загруженный класс нельзя привести к типу ResourceBundle
IllegalAccessException — если класс или его конструктор без аргументов недоступен.
InstantiationException — если создание экземпляра класса не удалось по другой причине.
ExceptionInInitializerError — если инициализация, вызванная этим методом, завершается с ошибкой.
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("en"), возвращается "baseName_en".

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

Параметры:
baseName — базовое имя ресурсного пакета, полное имя класса
locale — локаль, для которой следует загрузить ресурсный пакет
Возвращает:
имя ресурсного пакета
Исключения:
NullPointerException — если baseName или locale равен null
См. также:
  • 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".
Параметры:
bundleName — имя пакета
suffix — суффикс типа файла
Возвращает:
преобразованное имя ресурса
Исключения:
NullPointerException — если bundleName или suffix равен null

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, где представлены более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.base/java/util/ResourceBundle.Control.html

Spec-Zone.ru

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