Spec-Zone.ru › OpenJDK 17

Класс 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 при миграции к модулям. 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 искать только ресурсы в формате properties.

 import java.util.*;
 import static java.util.ResourceBundle.Control.*;
 ...
 ResourceBundle bundle =
   ResourceBundle.getBundle("MyResources", new Locale("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.

Методы, унаследованные от класса 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.", зарезервированы для будущих расширений и не должны использоваться для форматов, определённых приложением.

Необязательно возвращать неизменяемый (unmodifiable) 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)
Возвращает список кандидатов из доступных языков, как кандидатов для Locale и locale. Этот метод вызывается фабричным методом ResourceBundle.getBundle каждый раз, когда фабричный метод пытается найти набор ресурсов для целевого Locale.

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

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

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

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

  1. Для входного языка со значением сценария, равным пустой строке, добавляются кандидаты, опуская конечный компонент по одному, как показано ниже:
    • [L, C, V]
    • [L, C]
    • [L]
    • Locale.ROOT
  2. Для входного языка с непустым значением сценария, добавляются кандидаты, опуская конечный компонент до языка, затем добавляются кандидаты, сгенерированные из входного языка, с восстановленными страной и вариантом:
    • [L, S, C, V]
    • [L, S, C]
    • [L, S]
    • [L, C, V]
    • [L, C]
    • [L]
    • Locale.ROOT
  3. Для входного языка со значением варианта, состоящего из нескольких подтегов, разделённых знаком нижнего подчёркивания, генерируются кандидаты, опуская подтеги варианта по одному, затем вставляются после каждого вхождения подтегов со значением полного варианта в исходном списке. Например, если вариант состоит из двух подтегов 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. Специальные случаи для китайского языка. Когда входной язык имеет язык "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") (обработанного выше), когда входной язык имеет язык "no" или "nb", кандидаты со значениями языка "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 если дальнейший поиск по умолчанию не требуется.

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

Parameters:
baseName - базовое имя набора ресурсов, полное имя класса, для которого метод ResourceBundle.getBundle не смог найти какие-либо наборы ресурсов (кроме базового)
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 используется для отключения кешей базовых слоёв загрузки ресурсов и для получения InputStream. В противном случае вызывается loader.getResourceAsStream для получения InputStream. Затем с этим InputStream создаётся PropertyResourceBundle.
  • Если 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 factory. То есть, если метод factory находит в кэше ресурсный пакет, срок действия которого истек, метод factory вызывает метод 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 factory метод вызывает этот метод на экземпляре 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, 2021, 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/17/docs/api/java.base/java/util/ResourceBundle.Control.html

Spec-Zone.ru

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