Почему Locale окончательный в Java?
Класс java.util.Locale
объявлен как final
, что означает, что ничто не может расширить его.
Проект ICU4J написал расширение этого класса - com.ibm.icu.util.ULocale
(который также final
), но из-за этого он не может наследоваться или легко использоваться вместо Locale
,
Какова будет причина этого?
1 ответ
Расширение локалей - это не то, что легко сделать без изменения базовой системы из-за глубокой интеграции в те системы, которые есть в локалях.
Если бы вы могли продлить Locale
чтобы добавить некоторые дополнительные свойства, то ни один из классов, которые в настоящее время принимают Locale
знал бы, как справиться с ними.
Предполагая, что у вас есть JDK просто Locale
поддержка, и вы могли бы пройти в ULocale
который имеет более глубокую поддержку (например, указание календаря и цифр для использования, отличных от значения по умолчанию для основного языкового стандарта), тогда вы не могли ожидать код, который принимает традиционный JDK Locale
поддерживать эти функции.