Почему Locale окончательный в Java?

Класс java.util.Locale объявлен как final, что означает, что ничто не может расширить его.

Проект ICU4J написал расширение этого класса - com.ibm.icu.util.ULocale (который также final), но из-за этого он не может наследоваться или легко использоваться вместо Locale,

Какова будет причина этого?

1 ответ

Решение

Расширение локалей - это не то, что легко сделать без изменения базовой системы из-за глубокой интеграции в те системы, которые есть в локалях.

Если бы вы могли продлить Locale чтобы добавить некоторые дополнительные свойства, то ни один из классов, которые в настоящее время принимают Locale знал бы, как справиться с ними.

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

Другие вопросы по тегам