La mejor manera de devolver el indicador de estado y el mensaje de un método en Java

Tengo un escenario engañosamente simple y quiero una solución simple, pero no es obvio cuál es "más correcto" o "más Java".

Digamos que tengo un pequeño método de autenticación (Cliente cliente) en alguna clase. La autenticación podría fallar por varias razones, y quiero devolver un booleano simple para el flujo de control, pero también devolver un mensaje de cadena para el usuario. Estas son las posibilidades que puedo pensar:

Devuelve un booleano y pasa un StringBuilder para recopilar el mensaje. Esta es la forma más cercana de hacerlo al estilo C.Lanza una excepción en lugar de devolver false e incluye el mensaje. No me gusta esto ya que el fracaso no es excepcional.Cree una nueva clase llamada AuthenticationStatus con boolean y String. Esto parece excesivo para un método pequeño.Almacene el mensaje en una variable miembro. Esto introduciría una posible condición de carrera, y no me gusta que implique algún estado que realmente no existe.

¿Cualquier otra sugerencia?

Editar Perdí esta opción

Regresar nulo para el éxito - ¿Es esto inseguro?

Editar Solución:

Fui por la solución más OO y creé una pequeña clase AuthenticationResult. No haría esto en ningún otro idioma, pero me gusta en Java. También me gustó la sugerencia de devolver un String [] ya que es como el retorno nulo pero más seguro. Una ventaja de la clase Resultado es que puede tener un mensaje de éxito con más detalles si es necesario.

Respuestas a la pregunta(17)

Su respuesta a la pregunta