Java 8 представила класс Optional
, который используется для представления наличия или отсутствия значения. Это стало полезным инструментом для решения проблемы NullPointerException
, предоставляя явное представление о том, что значение может отсутствовать. Однако существует общепринятое мнение, что использовать Optional
в качестве аргументов метода не рекомендуется.
Давайте рассмотрим пример. У нас есть метод, который принимает два параметра, оба из которых могут быть необязательными. Использование Optional
в качестве аргумента метода могло бы выглядеть так:
public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2) { // my logic }
Впервые увидев это, кажется, что это отличное решение. Оно ясно указывает, что параметры могут отсутствовать. Однако есть несколько причин, по которым это может быть плохой идеей.
Во-первых, использование Optional
в качестве аргумента метода может привести к избыточности и сложности кода. Если значение аргумента может быть null
, это должно быть ясно указано в документации метода. Если разработчик забыл проверить на null
перед передачей значения в метод, Optional
не поможет избежать ошибки NullPointerException
.
Во-вторых, с точки зрения дизайна, Optional
предназначен для использования в качестве возвращаемого типа, чтобы указать, что метод может не вернуть значение. Это не предназначено для использования в качестве аргумента метода, так как это может привести к неправильному использованию и путанице.
В-третьих, использование Optional
в качестве аргумента метода может привести к ненужным проверкам на наличие значения. Если метод может корректно обрабатывать null
значения, нет необходимости в дополнительной проверке на наличие значения Optional
.
Вместо использования Optional
в качестве аргументов метода, рекомендуется использовать перегрузку методов или паттерн проектирования Builder для создания более ясного и понятного API. Правильное использование Optional
поможет создать более чистый и безопасный код.
Добавить комментарий