Au cas où vous ne peut pas éviter d'enfreindre la Loi de Déméter (LdD) comme indiqué dans la réponse choisie, et avec Java 8 présentation de En option Si vous n'êtes pas d'accord, il serait probablement préférable de traiter les valeurs nulles dans les chaînes d'obtention telles que la vôtre.
El Optional
vous permettra de canaliser plusieurs opérations de mappage (qui contiennent des appels get) dans une rangée. La vérification des nuls est automatiquement gérée par le système.
Par exemple, lorsque les objets ne sont pas initialisés, aucun print() ne sera effectué et aucune exception ne sera levée. Tout sera géré en douceur sous le capot. Lorsque les objets sont initialisés, un print sera effectué.
System.out.println("----- Not Initialized! -----");
Optional.ofNullable(new Outer())
.map(out -> out.getNested())
.map(nest -> nest.getInner())
.map(in -> in.getFoo())
.ifPresent(foo -> System.out.println("foo: " + foo)); //no print
System.out.println("----- Let's Initialize! -----");
Optional.ofNullable(new OuterInit())
.map(out -> out.getNestedInit())
.map(nest -> nest.getInnerInit())
.map(in -> in.getFoo())
.ifPresent(foo -> System.out.println("foo: " + foo)); //will print!
class Outer {
Nested nested;
Nested getNested() {
return nested;
}
}
class Nested {
Inner inner;
Inner getInner() {
return inner;
}
}
class Inner {
String foo = "yeah!";
String getFoo() {
return foo;
}
}
class OuterInit {
NestedInit nested = new NestedInit();
NestedInit getNestedInit() {
return nested;
}
}
class NestedInit {
InnerInit inner = new InnerInit();
InnerInit getInnerInit() {
return inner;
}
}
class InnerInit {
String foo = "yeah!";
String getFoo() {
return foo;
}
}
Donc, avec votre chaîne de getters cela ressemblera à ceci :
Optional.ofNullable(house)
.map(house -> house.getFloor(0))
.map(floorZero -> floorZero.getWall(WEST))
.map(wallWest -> wallWest.getDoor())
.map(door -> wallWest.getDoor())
Le retour de celui-ci sera quelque chose comme Optional<Door>
ce qui vous permettra de travailler de manière beaucoup plus sûre sans vous soucier des exceptions nulles.