Замена повторяющегося оператора get на Java 8 Необязательно

У меня есть сценарий использования, где у меня есть вложенные классы и объект высшего класса. Я хочу получить значение, которое находится на N-м уровне. Я использую геттеры для достижения этой цели, чтобы избежать NPE. Пример кода (при условии, что есть геттеры)

class A {
    String a1;
    String getA1() {
        return a1;
    }
}

class B {
    A a;
    A getA() {
        return a;
    }
}

class C {
    B b;
    B getB() {
        return b;
    }
}

class D {
    C c;
    C getC() {
        return c;
    }
}

Если у меня есть объектd классаDи хочу получитьString a1 изA, что я делаю, это следующее:

String getAValue(D d) {
    String aValue = null;
    if(d != null && d.getC() != null && d.getC().getB() != null && d.getC().getB().getA() != null) {
        aValue = d.getC().getB().getA().getA1();
    }
    return aValue;
}

Этот повторяющийся выглядит действительно уродливо. Как мне избежать этого, используя java8 Необязательно?

РЕДАКТИРОВАТЬ: я не могу изменить вышеупомянутые классы. Предположим, этот d-объект возвращается мне в качестве служебного вызова. Я подвержен только этим добытчикам.

Ответы на вопрос(2)

Ваш ответ на вопрос