Spec-Zone .ru
спецификации, руководства, описания, API
|
public static class ResourceBundle.Control extends Object
ResourceBundle.Control
определяет ряд методов обратного вызова, которые вызываются ResourceBundle.getBundle
методы фабрики во время процесса загрузки пакета. Другими словами, a ResourceBundle.Control
сотрудничает с методами фабрики для того, чтобы загрузить пакеты ресурса. Реализация по умолчанию методов обратного вызова предоставляет информацию, необходимую для методов фабрики, чтобы выполнить поведение по умолчанию. В дополнение к методам обратного вызова, toBundleName
и toResourceName
методы определяются прежде всего для удобства в реализации методов обратного вызова. Однако, toBundleName
метод мог быть переопределен, чтобы обеспечить различные соглашения в организации и упаковке локализованных ресурсов. toResourceName
метод final
избегать использования неправильного ресурса и разделителей имени класса.
Два метода фабрики, getControl(List)
и getNoFallbackControl(List)
, обеспечить ResourceBundle.Control
экземпляры, которые реализуют общие изменения процесса загрузки пакета по умолчанию.
Форматы, возвращенные getFormats
метод и локали кандидата, возвращенные getCandidateLocales
метод должен быть непротиворечивым всего ResourceBundle.getBundle
вызовы для того же самого основного пакета. Иначе, ResourceBundle.getBundle
методы могут возвратить непреднамеренные пакеты. Например, если только "java.class"
возвращается getFormats
метод для первого звонка ResourceBundle.getBundle
и только "java.properties"
для второго вызова тогда второй вызов возвратит основанный на классе, который кэшировался во время первого вызова.
A 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", 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() { ... } }
Модификатор и Тип | Поле и Описание |
---|---|
static List<String> |
FORMAT_CLASS
Формат только для класса
List содержа "java.class" . |
static List<String> |
FORMAT_DEFAULT
Формат по умолчанию
List , который содержит строки "java.class" и "java.properties" , в этом порядке. |
static List<String> |
FORMAT_PROPERTIES
Формат только для свойств
List содержа "java.properties" . |
static long |
TTL_DONT_CACHE
Время-к-живому, постоянное для того, чтобы не кэшировать загруженный ресурс, связывает экземпляры.
|
static long |
TTL_NO_EXPIRATION_CONTROL
Время-к-живому, постоянное для того, чтобы запретить управление истечением для загруженного ресурса, связывает экземпляры в кэше.
|
Модификатор | Конструктор и Описание |
---|---|
protected |
ResourceBundle.Control()
Единственный конструктор.
|
Модификатор и Тип | Метод и Описание |
---|---|
List<Locale> |
getCandidateLocales(String baseName, Locale locale)
Возвраты a
List из Locale s как локали кандидата для baseName и locale . |
static ResourceBundle.Control |
getControl(List<String> formats)
|
Локаль |
getFallbackLocale(String baseName, Locale locale)
Возвраты a
Locale чтобы использоваться в качестве локали нейтрализации для дальнейшего ресурса связывают поиски ResourceBundle.getBundle метод фабрики. |
List<String> |
getFormats(String baseName)
Возвраты a
List из String s содержащий форматы, которые будут использоваться, чтобы загрузить пакеты ресурса для данного baseName . |
static ResourceBundle.Control |
getNoFallbackControl(List<String> formats)
Возвраты a
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)
Инстанцирует пакета ресурса для данного имени пакета данного формата и локали, используя данный загрузчик класса в случае необходимости.
|
Строка |
toBundleName(String baseName, Locale locale)
Преобразовывает данный
baseName и locale к имени пакета. |
Строка |
toResourceName(String bundleName, String suffix)
Преобразовывает данный
bundleName к форме, требуемой ClassLoader.getResource метод, заменяя все возникновения '.' в bundleName с '/' и добавление a '.' и данный файл suffix . |
public static final List<String> FORMAT_DEFAULT
List
, который содержит строки "java.class"
и "java.properties"
, в этом порядке. Это List
является неподдающимся изменению.getFormats(String)
public static final List<String> FORMAT_CLASS
getFormats(String)
public static final List<String> FORMAT_PROPERTIES
List
содержа "java.properties"
. Это List
является неподдающимся изменению.getFormats(String)
public static final long TTL_DONT_CACHE
public static final long TTL_NO_EXPIRATION_CONTROL
protected ResourceBundle.Control()
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
неизвестно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
неизвестноpublic List<String> getFormats(String baseName)
List
из String
s содержащий форматы, которые будут использоваться, чтобы загрузить пакеты ресурса для данного baseName
. ResourceBundle.getBundle
метод фабрики пытается загрузить пакеты ресурса форматами в порядке, определенном списком. У списка, возвращенного этим методом, должен быть по крайней мере один String
. Предопределенные форматы "java.class"
поскольку основанный на классе ресурс связывается и "java.properties"
для основанных на свойствах. Строки, запускающиеся с "java."
резервируются для будущих расширений и не должен использоваться определенными с помощью приложения форматами. Это не требование, чтобы возвратить (неподдающееся изменению) неизменное List
. Однако, возвращенный List
не должен быть видоизменен после того, как это было возвращено getFormats
.
Возвраты реализации по умолчанию FORMAT_DEFAULT
так, чтобы ResourceBundle.getBundle
метод фабрики ищет основанные на первом классе пакеты ресурса, тогда основанные на свойствах.
baseName
- базовое имя пакета ресурса, полностью определенного имени классаList
из String
s содержащий форматы для того, чтобы загрузить пакеты ресурса.NullPointerException
- если baseName
нульFORMAT_DEFAULT
, FORMAT_CLASS
, FORMAT_PROPERTIES
public List<Locale> getCandidateLocales(String baseName, Locale locale)
List
из Locale
s как локали кандидата для baseName
и locale
. Этот метод вызывают ResourceBundle.getBundle
метод фабрики каждый раз метод фабрики пытается найти пакет ресурса для цели Locale
. Последовательность локалей кандидата также соответствует пути поиска ресурса времени выполнения (также известный как родительская цепочка), если соответствующие пакеты ресурса для локалей кандидата существуют, и их родители не определяются загруженными пакетами ресурса непосредственно. Последний элемент списка должен быть корневой локалью, если это требуется, чтобы иметь основной пакет как терминал родительской цепочки.
Если данная локаль равна Locale.ROOT
(корневая локаль), a List
содержа только корень Locale
должен быть возвращен. В этом случае, ResourceBundle.getBundle
метод фабрики загружает только основной пакет как получающийся пакет ресурса.
Это не требование, чтобы возвратить (неподдающееся изменению) неизменное List
. Однако, возвращенный List
не должен быть видоизменен после того, как это было возвращено getCandidateLocales
.
Реализация по умолчанию возвращает a List
содержа Locale
s использование правил, описанных ниже. В описании ниже, L, S, C и V соответственно представляют непустой язык, сценарий, страну, и разновидность. Например, [L, C] представляет a Locale
у этого есть непустые значения только для языка и страны. Форма L ("xx") представляет (непустое) значение языка, "xx". Для всех случаев, Locale
s, чьи заключительные компонентные значения являются пустыми строками, опускаются.
Locale
с пустым значением сценария добавьте кандидата Locale
s, опуская заключительный компонент один за другим как указано ниже: Locale.ROOT
Locale
с непустым значением сценария добавьте кандидата Locale
s, опуская заключительный компонент до языка, затем добавьте кандидатов, сгенерированных от Locale
со страной и разновидностью восстановил: Locale.ROOT
Locale
с различным значением, состоящим из многократных подтегов, разделенных подчеркиванием, генерируйте кандидата Locale
s, опуская различные подтеги один за другим, затем вставьте их после каждого происшествия Locale
s с полным различным значением в исходном списке. Например, если разновидность состоит из двух подтегов V1 и V2: Locale.ROOT
Locale
имеет язык "zh" (китайский язык) и пустое значение сценария, или (Упрощенный) "Ганс" или (Традиционный) "Hant" могли бы быть предоставлены, в зависимости от страны. Когда страна является "CN" (Китай) или "SG" (Сингапур), "Ганс" предоставляется. Когда страной является "HK" (Гонконгский SAR Китай), "MO" (SAR Макао Китай), или "ТВТ" (Тайвань), "Hant" предоставляется. Для всех других стран или когда страна пуста, не предоставляется никакой сценарий. Например, для Locale("zh", "CN")
, список кандидатов будет: Locale.ROOT
Locale("zh", "TW")
, список кандидатов будет: Locale.ROOT
Locale("no", "NO", "NY")
и Locale("nn", "NO")
представьте норвежский Nynorsk. Когда язык локали является "nn", стандартный список кандидатов сгенерирован до [L ("nn")], и затем следующие кандидаты добавляются: Locale.ROOT
Locale("no", "NO", "NY")
, это сначала преобразовывается в Locale("nn", "NO")
и затем вышеупомянутая процедура сопровождается. Кроме того, Java обрабатывает язык "нет" как синоним норвежского Bokmål "nb". За исключением единственного случая Locale("no", "NO", "NY")
(обработанный выше), когда ввод Locale
имеет язык "нет" или "nb", кандидат Locale
s с языком кодируют "нет", и "nb" чередуются, сначала используя требуемый язык, затем используя его синоним. Например, Locale("nb", "NO", "POSIX")
генерирует следующий список кандидатов:
Locale.ROOT
Locale("no", "NO", "POSIX")
генерировал бы тот же самый список за исключением того, что локали с "нет" появятся перед соответствующими локалями с "nb".Реализация по умолчанию использует ArrayList
то переопределение реализации может изменить прежде, чем возвратить это вызывающей стороне. Однако, подкласс не должен изменить это после того, как это было возвращено getCandidateLocales
.
Например, если данный baseName
"сообщения" и данный locale
Locale("ja", "", "XX")
, тогда a List
из Locale
s:
Locale("ja", "", "XX") Locale("ja") Locale.ROOTвозвращается. И если ресурс связывается для "ja" и""
Locale
s находятся, тогда путь поиска ресурса времени выполнения (родительская цепочка): Messages_ja -> Messages
baseName
- базовое имя пакета ресурса, полностью определенного имени классаlocale
- локаль, для которой требуется пакет ресурсаList
из кандидата Locale
s для данного locale
NullPointerException
- если baseName
или locale
null
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
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException
null
если нет никакого пакета ресурса, доступного для данных параметров. Если пакет ресурса нельзя инстанцировать из-за неожиданной ошибки, об ошибке нужно сообщить, бросая Error
или Exception
вместо простого возврата null
. Если reload
флаг true
, это указывает, что этот метод вызывают, потому что ранее загруженный пакет ресурса истек.
Реализация по умолчанию инстанцирует a ResourceBundle
следующим образом.
toBundleName(baseName, locale)
.format
"java.class"
, Class
определенный именем пакета загружается, вызывая ClassLoader.loadClass(String)
. Затем, a ResourceBundle
инстанцируется, вызывая Class.newInstance()
. Отметьте что reload
флаг игнорируется для того, чтобы загрузить основанные на классе пакеты ресурса в этой реализации по умолчанию.format
"java.properties"
, toResourceName(bundlename, "properties")
вызывается, чтобы получить имя ресурса. Если reload
true
, load.getResource
вызывается, чтобы получить a URL
для того, чтобы создать a URLConnection
. Это URLConnection
используется, чтобы отключить кэши базовых уровней загрузки ресурса, и добраться InputStream
. Иначе, loader.getResourceAsStream
вызывается, чтобы добраться InputStream
. Затем, a PropertyResourceBundle
создается с InputStream
.format
ни один не "java.class"
ни "java.properties"
, IllegalArgumentException
бросается.baseName
- основное имя пакета пакета ресурса, полностью определенного имени классаlocale
- локаль, для которой нужно инстанцировать пакет ресурсаformat
- пакет ресурса форматирует, чтобы быть загруженнымloader
- ClassLoader
использовать, чтобы загрузить пакетreload
- флаг, чтобы указать на перезагрузку пакета; true
перезагружая пакет ресурса с истекшим сроком, false
иначеnull
если ни один не мог бы быть найден.NullPointerException
- если bundleName
, locale
, format
, или loader
null
, или если null
возвращается toBundleName
IllegalArgumentException
- если format
неизвестно, или если ресурс, найденный для данных параметров, содержит некорректные данные.ClassCastException
- если загруженный класс не может быть брошен к ResourceBundle
IllegalAccessException
- если класс или его nullary конструктор не доступны.InstantiationException
- если инстанцирование класса перестало работать по некоторой другой причине.ExceptionInInitializerError
- если инициализация вызывается этим методом сбои.SecurityException
- Если менеджер безопасности присутствует, и создание новых экземпляров отрицается. См. Class.newInstance()
для деталей.IOException
- если ошибка произошла, читая ресурсы, используя какие-либо операции ввода-выводаpublic long getTimeToLive(String baseName, Locale locale)
ResourceBundle.Control
. Положительные значения времени-к-живому определяют число миллисекунд, которыми пакет может остаться в кэше, не будучи проверенным против исходных данных, из которых это было создано. Значение 0 указывает, что пакет должен быть проверен каждый раз, когда это получается от кэша. TTL_DONT_CACHE
определяет, что загруженные пакеты ресурса не помещаются в кэш. TTL_NO_EXPIRATION_CONTROL
определяет, что загруженные пакеты ресурса помещаются в кэш без управления истечением. Истечение влияет только на процесс загрузки пакета ResourceBundle.getBundle
метод фабрики. Таким образом, если метод фабрики находит пакет ресурса в кэше, который истек, вызовы метода фабрики needsReload
метод, чтобы определить, должен ли пакет ресурса быть перезагружен. Если needsReload
возвраты true
, кэшируемый экземпляр пакета ресурса удаляется из кэша. Иначе, экземпляр остается в кэше, обновленном с новым значением TTL, возвращенным этим методом.
Все кэшируемые пакеты ресурса подвергаются удалению от кэша из-за ограничений памяти среды выполнения. Возврат большого положительного значения не означает блокировать загруженные пакеты ресурса в кэше.
Возвраты реализации по умолчанию TTL_NO_EXPIRATION_CONTROL
.
baseName
- базовое имя ресурса связывается, для которого определяется значение истечения.locale
- локаль ресурса связывается, для которого определяется значение истечения.TTL_NO_EXPIRATION_CONTROL
отключить управление истечением, или TTL_DONT_CACHE
отключить кэширование.NullPointerException
- если baseName
или locale
null
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
public String toBundleName(String baseName, Locale locale)
baseName
и locale
к имени пакета. Этот метод вызывают от реализации по умолчанию newBundle
и needsReload
методы. Эта реализация возвращает следующее значение:
baseName + "_" + language + "_" + script + "_" + country + "_" + variantгде
language
, script
, country
, и variant
язык, сценарий, страна, и различные значения locale
, соответственно. Заключительные компонентные значения, которые являются пустыми Строками, опускаются наряду с предыдущим '_'. Когда сценарий пуст, значение сценария является ommitted наряду с предыдущим '_'. Если все значения являются пустыми строками, то baseName
возвращается. Например, если baseName
"baseName"
и locale
Locale("ja", "", "XX")
, тогда "baseName_ja_ _XX"
возвращается. Если данная локаль Locale("en")
, тогда "baseName_en"
возвращается.
Переопределение этого метода позволяет приложениям использовать различные соглашения в организации и упаковке локализованных ресурсов.
baseName
- базовое имя пакета ресурса, полностью определенного имени классаlocale
- локаль, для которой должен быть загружен пакет ресурсаNullPointerException
- если baseName
или locale
null
public final String toResourceName(String bundleName, String suffix)
bundleName
к форме, требуемой ClassLoader.getResource
метод, заменяя все возникновения '.'
в bundleName
с '/'
и добавление a '.'
и данный файл suffix
. Например, если bundleName
"foo.bar.MyResources_ja_JP"
и suffix
"properties"
, тогда "foo/bar/MyResources_ja_JP.properties"
возвращается.bundleName
- имя пакетаsuffix
- суффикс типа файлаNullPointerException
- если bundleName
или suffix
null
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.