Я не хочу вообще отключить предупреждение , и я уже знаю , почему вы предположительно не должны использовать Optional
в качестве параметра .Тем не менее, я не думаю, что это относится к моему делу.
В целях иллюстрации у меня есть код, который выглядит следующим образом:
//IntelliJ reports: 'Optional<ForeignDataTransferObject>' used as type for parameter 'data'
private LocalSystemPerson extractPerson(Optional<ForeignDataTransferObject> data) {
return data
.map(data -> data.getPeopleListWrapper())
.map(peopleListWrapper -> peopleListWrapper.getList())
.map(listOfForeignPeople -> listOfForeignPeople.stream())
.orElseGet(Stream::empty)
.findFirst()
.map(foreignPerson -> convertToLocalSystemPerson(foreignPerson))
.orElse(someFallbackValue);
}
Получается список людей, а затем первыйзатем преобразовать его.Так как я вызываю внешний API и получаю объект передачи данных с кучей полей, каждое из которых может быть пустым, любые коллекции заключаются в дополнительный класс, и даже тогда получение пустого списка является допустимым случаем.Итак, я получаю подробный код для преобразования одного значения.Я спрятал его в отдельный вспомогательный метод, чтобы избежать всего этого многословия в одном месте.
Однако IntelliJ жалуется, что я передаю параметр Optional
.Это то, с чем я обычно согласен, но я не вижу в этом проблемы, если это частный метод, который я использую, чтобы избавить другой метод от слишком длинных - мне может понадобиться извлечь более одного значения из передачи данныхобъект.
- Я все еще хочу избегать создания открытых методов, которые принимают
Optional
или полей, которые содержат Optional
, но я хочу отключить проверку для частных методов. - Я бы предпочел не аннотировать каждый метод с помощью
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
, поскольку он быстро становится раздражающим.У меня может быть несколько таких методов в различных классах, которые принимают некоторые сторонние DTO. - Аналогично, я также не хочу передавать параметр, отличный от
Optional
, только чтобы обернуть его внутри метода.Тем более, что в некоторых случаях у меня уже есть только Optional
, поэтому мне придется развернуть его, затем обернуть обратно чем-нибудь вроде myMethod(data.orElse(null))
, а затем сделать Optiona.ofNullable(parameter)
в методе.
В целом, кажется неразумным ограничением всегда рассматривать эту проблему как проблему, даже если она не будет передавать данные между системами или между слоями и т. Д.
Итак, можно ли вообще отключить это изнастройки только для приватных методов, но больше ничего?