Это хорошая идея, чтобы использовать метод Optional.of () для создания цепочки методов? - PullRequest
0 голосов
/ 15 сентября 2018

Является ли хорошей идеей использовать метод Optional.of () для создания цепочки методов?

У меня был разговор с группой коллег о методе Optional.of (). В настоящее время один из проектов они используют метод Optional.of () для достичь метода цепочки функционального стиля программирования.

Вот пример для примера:

    TxResponse initTxDataResponse = gateway.initiateTx(initTxDataRequest);
    Optional.of(initTxDataResponse)
            .map(initTxDataResponse::getReturnCode)
            .filter(code -> ResponseCode.SUCCESS.getCode().equals(code))
            .map(code -> {
                // doing some business logic ,we are not
                return code;
            }).orElseThrow(() -> new NoTransactionFound());

Я чувствую, что мы злоупотребляем методом Optional.of ()

Рекомендуется ли использовать метод Optional.of () для достижения функционального стиля программирования в jdk 8?

Случай 2:

TxResponse response = transactionRepository.getTransacationById(TransactionId).elseThrow(() -> ResourceNotFoundException());

Optional.of(response)
        .map(response::getReturnCode)
        .filter(code -> ResponseCode.SUCCESS.getCode().equals(code))
        .map(code -> {
            // doing some business logic ,we are not
            return code;
        }).orElseThrow(() -> new RuntimeException());

В этом случае для достижения функционального стиля программирования требуется Optional.of ()?

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Если initTxDataResponse имеет значение nullable, то, возможно, так должно быть?

Optional<TxResponse> initTxDataResponse = 
        gateway.initiateTx(initTxDataRequest);

response.map(....)
0 голосов
/ 15 сентября 2018

Если вы не возражаете против ответа без кода, просто мои 0,02 $.

Мы много сражались за это на своем рабочем месте (в обзорах кода). Чтобы быть откровенным, я иногда теряюсь относительно того, когда это правильно (читай, задумано создателями этого) или нет. Я даже не думаю, что во время создания Стюарт Маркс и другие были уверены, как это будет (ab) использовано. Как и любая другая функция языка Java, она будет нарушена, будьте уверены в этом. Но со временем появятся лучшие практики, и люди будут ими пользоваться.

Я склонен быть на стороне того, что если , это не ухудшает производительность, ваше использование в порядке. По крайней мере, его так легко прочитать (говоря здесь за себя), по сравнению с проверками if else; но опять же, возможно, я делаю (слишком) много Java-8 и выше кода.

При этом слишком легко превратить его в полный беспорядок, где эта граница зависит от вас (и, скорее всего, от вашей команды).

0 голосов
/ 15 сентября 2018

Я думаю, Java Optional создана только для этих типов использования - чтобы избежать нулевых проверок и выполнять операции через цепочку и без страха перед NPE.

Не думаю, что вы злоупотребляете Optional.

Из Официальной статьи от Oracle

Цель Необязательный - не заменить каждую нулевую ссылку в вашей кодовой базе, а скорее, чтобы помочь разработать лучшие API, в которых - просто читая подпись метода - пользователи могут сказать, стоит ли ожидать необязательное значение. Кроме того, Необязательно заставляет вас активно развернуть Необязательный для решения проблемы отсутствия значения; в результате вы защитить ваш код от непреднамеренных исключений нулевого указателя.

...