¿Existe alguna alternativa al código con hiper sangría?

A menudo me encuentro con un código que tiene que realizar muchas comprobaciones y termina sangrado al menos cinco o seis niveles antes de realmente hacer algo. Me pregunto qué alternativas existen.

A continuación, publiqué un ejemplo de lo que estoy hablando (que no es un código de producción real, solo algo que se me ocurrió).

public String myFunc(SomeClass input)
{
    Object output = null;

    if(input != null)
    {
        SomeClass2 obj2 = input.getSomeClass2();
        if(obj2 != null)
        {
            SomeClass3 obj3 = obj2.getSomeClass3();
            if(obj3 != null && !BAD_OBJECT.equals(obj3.getSomeProperty()))
            {
                SomeClass4 = obj3.getSomeClass4();
                if(obj4 != null)
                {
                    int myVal = obj4.getSomeValue();
                    if(BAD_VALUE != myVal)
                    {
                        String message = this.getMessage(myVal);
                        if(MIN_VALUE <= message.length() &&
                           message.length() <= MAX_VALUE)
                        {
                            //now actually do stuff!
                            message = result_of_stuff_actually_done;
                        }
                    }
                }
            }
        }
    }
    return output;
}

Respuestas a la pregunta(7)

Su respuesta a la pregunta