У меня обманчиво простой сценарий, и я хочу простое решение, но это не очевидно, что является "наиболее правильным" или "самой Java".
Скажем, у меня есть небольшой метод проверки подлинности (клиентский клиент) в каком-то классе. Аутентификация может завершиться неудачей по ряду причин, и я хочу вернуть простое логическое значение для потока управления, но также вернуть сообщение String для пользователя. Вот о чем я могу думать:
- Возвращает логическое значение и передается в StringBuilder для сбора сообщения. Это ближе всего к способу выполнения C-стиля.
- Выбросить исключение вместо того, чтобы возвращать false, и включать сообщение. Мне это не нравится, поскольку неудача не является исключительной.
- Создайте новый класс под названием AuthenticationStatus с булевым и String. Это кажется излишним для одного небольшого метода.
- Сохраните сообщение в переменной-члене. Это приведет к потенциальному состоянию гонки, и мне не нравится, что это подразумевает какое-то состояние, которое на самом деле не существует.
Любые другие предложения?
Изменить Отключен этот параметр
- Возвращает null для успеха - это небезопасно?
Изменить Решение:
Я пошел на самое решение OO и создал небольшой класс AuthenticationResult. Я бы не сделал этого ни на одном другом языке, но мне нравится это на Java. Мне также понравилось предложение о возврате String [], так как он возвращает нулевое значение, но более безопасен. Одним из преимуществ класса Result является то, что вы можете получить сообщение об успешном завершении, если потребуется.