Оболочка ненулевой строки - PullRequest
0 голосов
/ 03 марта 2019

У меня есть ситуация в моем коде Java, где я должен сделать много пустых проверок для строковых параметров:

someService.someUpdateFunc(Optional.ofNullable(personPhone.getName()).orElse(""),
                           Optional.ofNullable(personPhone.getNumber()).orElse(""),
                           Optional.ofNullable(personPhone.getDescription()).orElse("")
        );

Я знаю, что в Google Guava есть специальная функция, так чтоможно написать такой код:

someService.someUpdateFunc(nullToEmpty(personPhone.getName()),
                           nullToEmpty(personPhone.getNumber()),
                           nullToEmpty(personPhone.getDescription())
            );

Но мне нравится чистый ООП, поэтому я стараюсь сократить использование статических методов в моем коде.Существует ли специальный класс декоратора / оболочки для стандартного String в какой-либо библиотеке или фреймворке, который может инкапсулировать это поведение?Что-то вроде:

class StrictString {

        private final String origin;

        public StrictString(String origin) {
            this.origin = origin;
        }

        public String asString() {
            return Optional.ofNullable(origin).orElse("");
        }
}

Большое спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я не знаю такого класса декоратора.
Вы можете использовать Map или Properties, который имеет getOrDefault(), но это действительно противоречит интуиции.
Альтернативой будет Functionили здесь UnaryOperator.

UnaryOperator<String> orToEmptyFn = p -> p == null ? "" : p;
someService.someUpdateFunc(orToEmptyFn.apply(personPhone.getName()),
                           orToEmptyFn.apply(personPhone.getNumber()),
                           orToEmptyFn.apply(personPhone.getDescription())
            );  

Но, честно говоря, я бы придерживался вспомогательного метода или пользовательской оболочки, которую вы представили в своем вопросе.
В некоторых случаях введение определенных классов действительно подходит.Здесь, кажется, тот случай, если вы хотите сделать это без static.

0 голосов
/ 03 марта 2019

Если вам не нравится писать много кода (как я!), И если вам не нравится каждый раз оборачивать объекты вызовами методов, я предлагаю вам взглянуть на проект Manifold, особенно на классы расширения возможность ( документация ).

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

Возможный подход, к которому вы можете прибегнуть к использованию Manifold, это

final String name = ...
name.orElse("");

// Or even
name.orEmpty();

Какой imho, потрясающе .
Я успешно использовал Manifold в своих личных проектах и ​​рекомендую его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...