Spec-Zone.ru › OpenJDK 27

Класс 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 искать ресурсы только на основе свойств.

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
Формат только для свойств 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
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, является ли другой объект «равным» этому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо истечения заданного интервала реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо истечения заданного интервала реального времени.

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

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, для получения URL вызывается load.getResource, чтобы создать URLConnection. Этот URLConnection используется для отключения кэша нижележащих уровней загрузки ресурсов и для получения InputStream. В противном случае для получения InputStream вызывается loader.getResourceAsStream. Затем создаётся 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, 2026, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065, США.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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