Рубрики
Без рубрики

Java 8 Дополнительные Рекомендации По Использованию Классов на основе значений

Необязательный класс Java 8, Рекомендации по использованию необязательного класса Java, Пример необязательного класса Java, Чтобы избежать исключения NullPointerException с помощью необязательного класса в java, Учебник по примерам необязательного класса Java

Автор оригинала: Pankaj Kumar.

В этой статье мы рассмотрим использование необязательного класса Java 8 и поймем, что такое класс, основанный на значениях. Каковы сценарии использования класса, основанного на значениях? и, наконец, ознакомьтесь с рекомендациями по использованию по желанию.

Java 8 Необязательно

Необязательно-это объект-контейнер, который может содержать или не содержать ненулевое значение. Вы можете прочитать больше об этом здесь . В Java 9 были некоторые улучшения в необязательном классе , читайте о них здесь .

Зачем использовать Необязательный класс?

  • Способствует улучшению и очистке дизайна и кода
  • Он объявляет цель и намерение переменной.
  • Снижает затраты на тестирование
  • Избегает Исключения NullPointerException
  • Он поддерживает быстрый подход к программированию
  • Удаляет условные проверки котельной плиты.
  • Поддерживает свободный стиль
  • Способствует использованию функционального стиля программирования.

Необязательно-это класс, основанный на значениях. Мы рассмотрим класс, основанный на значениях, позже в этой статье.

Типы значений

Прежде чем мы углубимся в класс, основанный на значениях, давайте разберемся, что такое тип значения ? Тип значения-это тип данных, который предназначен для передачи по значению в методы и из методов и хранения по значению в структурах данных. Единственными типами значений, которые напрямую поддерживает язык Java, являются восемь примитивных типов.

В статье ” Состояние значений ” Брайан Гетц предложил, чтобы виртуальная машина Java и язык могли быть мягко расширены с помощью нового типа, типа значения, который с пользой сочетает свойства текущих классов Java и примитивных типов, и они должны быть небольшими неизменяемыми и без идентификации.

Тип значения должен быть синонимом “Кодируется как класс, работает как int”.

Класс, Основанный на Ценности

Концепция типа ценности легла в основу классов, основанных на ценности. Упакованная форма каждого типа значений будет классом, основанным на значениях.

Класс, основанный на значениях,-это класс-контейнер, который является оболочкой для типов, основанных на значениях, где экземпляры классов, основанных на значениях, следуют следующему принципу (из документации Java):

  • являются окончательными и неизменяемыми (хотя могут содержать ссылки на изменяемые объекты).
  • имеют реализации equals, хэш-кода и toString, которые вычисляются исключительно из состояния экземпляра, а не из его идентификатора или состояния любого другого объекта или переменной
  • не используйте операции, учитывающие личность, такие как равенство ссылок (==) между экземплярами, идентификационный код экземпляров или синхронизация внутренней блокировки экземпляров
  • считаются равными исключительно на основе равенства(), а не на основе ссылочного равенства (==)
  • не имеют доступных конструкторов, но вместо этого создаются экземпляры с помощью заводских методов, которые не фиксируют идентичность возвращаемых экземпляров
  • являются свободно заменяемыми при равенстве, что означает, что замена любых двух экземпляров x и y, которые равны в соответствии с equals() в любом вычислении или вызове метода, не должна приводить к видимым изменениям в поведении.

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

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

Java постепенно переходит к функциональному стилю программирования, и классы, основанные на ценностях, помогают поддерживать неизменность, которая является неотъемлемым аспектом функционального стиля программирования.

Рекомендации по использованию необязательных классов Java

Java Optional просто считается используемым в контексте замены исключения NullPointerException, и с момента его введения существуют различные сценарии, для которых это рекомендуется, однако, когда мы смотрим на это через призму класса, основанного на значении, мы получаем ограничение и цель использования необязательного:

  1. Необязательно не следует использовать для проверки на равенство или операций на основе идентификации. Не следует делать следующее:
  2. Он не должен использоваться в качестве ключа в HashMap . Не следует допускать следующего:

  3. Необязательно не следует использовать в качестве непереходной переменной в сериализуемом классе. Следует избегать следующего:
  4. Не следует использовать в качестве элемента сущности, данных или класса модели. Эти классы используются для сохранения и, следовательно, нуждаются в идентификации и сериализации; следовательно, мы не должны использовать необязательную переменную экземпляра.
  5. Необязательный класс Java не должен использоваться для синхронизации. Следует избегать следующего кода:
  6. Необязательный в первую очередь предназначен для использования в качестве возвращаемого типа метода, где существует явная необходимость представлять ” без результата ” и где использование null может привести к ошибкам.

    Переменная, тип которой необязателен, сама по себе никогда не должна быть нулевой; она всегда должна указывать на необязательный экземпляр. Допускается следующий способ кодирования:

Вывод

В этой статье мы выяснили, что такое класс, основанный на значениях? Каковы сценарии использования класса на основе значений и рекомендации по использованию для необязательных.