Mam przypadek użycia, w którym mam zagnieżdżone klasy i obiekt najwyższej klasy. Chcę uzyskać wartość, która jest na poziomie N-tym. Używam getters powtarzalnie, aby to osiągnąć, aby uniknąć NPE. Przykładowy kod (zakładając getters istnieją)Zamienianie powtarzających się instrukcji pobierania na Java 8 Opcjonalnie
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;
}
}
Jeśli mam obiektu d
klasy D
i chcesz uzyskać String a1
z A
, co robię jest następujący:
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;
}
ten powtarzające się jest naprawdę brzydkie. Jak mogę tego uniknąć, używając java8 Opcjonalnie?
EDYCJA: Nie mogę zmodyfikować powyższych klas. Załóżmy, że ten obiekt d został mi zwrócony jako wezwanie serwisowe. Jestem wystawiony tylko na te działania.
'map (D :: getC)' również działa, jeśli 'getC' zwraca nullable' C'. – ZhongYu