Spec-Zone.ru › OpenJDK 8

Класс LocaleServiceProvider

  • java.lang.Object
    • java.util.spi.LocaleServiceProvider
Прямые известные подклассы:
BreakIteratorProvider, CalendarDataProvider, CalendarNameProvider, CollatorProvider, CurrencyNameProvider, DateFormatProvider, DateFormatSymbolsProvider, DecimalFormatSymbolsProvider, LocaleNameProvider, NumberFormatProvider, TimeZoneNameProvider

public abstract class LocaleServiceProvider
extends Object

Это базовый класс для всех интерфейсов поставщиков сервисов, чувствительных к локали (SPI).

Интерфейсы поставщиков сервисов, чувствительных к локали, — это интерфейсы, соответствующие локали-чувствительным классам в пакетах java.text и java.util. Эти интерфейсы позволяют создавать локали-чувствительные объекты и получать локализованные имена для этих пакетов. Локали-чувствительные фабричные методы и методы для получения имен в пакетах java.text и java.util используют реализации интерфейсов поставщиков, чтобы обеспечить поддержку локалей, выходящих за рамки набора локалей, поддерживаемого самой средой выполнения Java.

Упаковывание реализаций поставщиков сервисов, чувствительных к локали

Реализации этих сервисов, чувствительных к локали, упаковываются с использованием механизма расширений Java (Механизм расширений Java) как установленные расширения. Поставщик идентифицирует себя с помощью файла конфигурации поставщика в каталоге ресурсов META-INF/services, используя полное имя класса интерфейса поставщика в качестве имени файла. Файл должен содержать список полных имён конкретных классов поставщика, по одному на строку. Строка завершается любой из следующих комбинаций: перевод строки ('\n'), возврат каретки ('\r'), или возврат каретки, сразу за которым следует перевод строки. Пробелы и символы табуляции вокруг каждого имени, а также пустые строки игнорируются. Символом комментария является '#' ('#'); после первого символа комментария на каждой строке все символы игнорируются. Файл должен быть закодирован в UTF-8.

Если конкретный класс поставщика указан более чем в одном файле конфигурации или указан в одном файле конфигурации более одного раза, то дубликаты будут проигнорированы. Файл конфигурации, указывающий на конкретного поставщика, не обязательно должен находиться в одном JAR-файле или другой единице распространения, что и сам поставщик. Поставщик должен быть доступен из того же загрузчика классов, который изначально запрашивался для поиска файла конфигурации; это не обязательно тот загрузчик классов, который загрузил файл.

Например, реализация класса DateFormatProvider должна представлять собой JAR-файл, содержащий файл:

META-INF/services/java.text.spi.DateFormatProvider
И файл java.text.spi.DateFormatProvider должен иметь строку вида:
com.foo.DateFormatProviderImpl
, которая является полным именем класса, реализующего DateFormatProvider.

Вызов сервисов, чувствительных к локали

Локали-чувствительные фабричные методы и методы для получения имен в пакетах java.text и java.util вызывают методы поставщиков сервисов, когда это необходимо, для поддержки запрошенной локали. Методы сначала проверяют, поддерживает ли сама среда выполнения Java запрошенную локаль, и используют её поддержку, если она доступна. В противном случае они вызывают методы isSupportedLocale установленных поставщиков для соответствующего интерфейса, чтобы найти поставщика, который поддерживает запрошенную локаль. Если такой поставщик найден, его другие методы вызываются для получения запрошенного объекта или имени. При проверке поддержки локали расширения локали по умолчанию игнорируются. (Если расширения локали также должны проверяться, необходимо переопределить метод isSupportedLocale. Если ни сама среда выполнения Java, ни установленный поставщик не поддерживают запрошенную локаль, методы проходят по списку кандидатов в локали и повторяют проверку доступности для каждой, пока не найдётся совпадение. Алгоритм, используемый для создания списка кандидатов в локали, по умолчанию такой же, как и у ResourceBundle, (см. getCandidateLocales для подробностей). Даже если локаль выбрана из списка кандидатов, методы, возвращающие запрошенные объекты или имена, вызываются с первоначально запрошенной локалью, включая Locale расширения. Среда выполнения Java должна поддерживать корневую локаль для всех сервисов, чувствительных к локали, чтобы гарантировать завершение этого процесса.

Поставщики имён (но не поставщики других объектов) могут возвращать null для некоторых запросов имён даже для локалей, которые они утверждают, что поддерживают, включив их в свои значения возврата для getAvailableLocales. Аналогично, сама среда выполнения Java может не иметь всех имён для всех поддерживаемых ею локалей. Это связано с тем, что наборы объектов, для которых запрашиваются имена, могут быть большими и меняться со временем, поэтому не всегда возможно полностью их охватить. Если среда выполнения Java или поставщик возвращают null вместо имени, поиск будет продолжен, как описано выше, как если бы локаль не поддерживалась.

Начиная с JDK8, порядок поиска сервисов, чувствительных к локали, можно настроить, используя системную переменную "java.locale.providers". Эта системная переменная объявляет предпочтительный порядок пользователя для поиска сервисов, чувствительных к локали, разделённых запятыми. Она читается только при запуске среды выполнения Java, поэтому последующий вызов System.setProperty() не повлияет на порядок.

Например, если в свойствах указано следующее:

java.locale.providers=SPI,JRE
где "SPI" представляет сервисы, чувствительные к локали, реализованные в установленных поставщиках SPI, а "JRE" — сервисы, чувствительные к локали, в среде выполнения Java, сервисы, чувствительные к локали, в поставщиках SPI, ищутся в первую очередь.

Есть ещё два возможных поставщика сервисов, чувствительных к локали, т.е. "CLDR", который основан на проекте CLDR Консорциума Unicode (Проект CLDR), и "HOST", который отражает пользовательские настройки в базовой операционной системе. Эти два поставщика могут быть недоступны, в зависимости от реализации среды выполнения Java. Указание "JRE,SPI" идентично поведению по умолчанию, которое совместимо с предыдущими версиями.

С:
1.6

Конструкторы

Модификатор Конструктор и описание
protected LocaleServiceProvider()

Единственный конструктор.

Методы

Модификатор и тип Метод и описание
abstract Locale[] getAvailableLocales()

Возвращает массив всех локалей, для которых этот поставщик сервисов локали может предоставить локализованные объекты или имена.

boolean isSupportedLocale(Locale locale)

Возвращает true, если заданная locale поддерживается этим поставщиком сервисов локали.

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

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

Конструкторы

LocaleServiceProvider

protected LocaleServiceProvider()

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

Методы

getAvailableLocales

public abstract Locale[] getAvailableLocales()

Возвращает массив всех локалей, для которых этот поставщик сервисов локали может предоставить локализованные объекты или имена. Эта информация используется для составления значений getAvailableLocales() локали-зависимых сервисов, таких как DateFormat.getAvailableLocales().

Массив, возвращённый этим методом, не должен содержать два или более объектов Locale отличающихся только своими расширениями.

Возвращает:
Массив всех локалей, для которых этот поставщик сервисов локали может предоставить локализованные объекты или имена.

isSupportedLocale

public boolean isSupportedLocale(Locale locale)

Возвращает true, если заданная locale поддерживается этим поставщиком сервисов локали. Заданная locale может содержать расширения, которые должны учитываться при определении поддержки.

Реализация по умолчанию возвращает true, если заданная locale равна какой-либо из доступных Locale возвращённых методом getAvailableLocales() с игнорированием любых расширений в заданной locale и доступных локалях. Конкретные реализации поставщиков сервисов локали должны переопределять этот метод, если эти реализации учитывают расширения. Например, реализации DecimalFormatSymbolsProvider должны проверять расширения в заданной locale для определения, задан ли какой-либо формат счисления и может ли он поддерживаться. Однако реализации CollatorProvider могут не затрагиваться какими-либо конкретными форматами счисления, и в этом случае расширения форматов счисления должны игнорироваться.

Параметры:
locale - тестируемая Locale
Возвращает:
true если заданная locale поддерживается этим поставщиком; false в противном случае.
Выбрасывает:
NullPointerException - если заданная locale null
С:
1.8
См. также:
Locale.hasExtensions(), Locale.stripExtensions()

© 1993, 2020, 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