2015-04-24 4 views
5

object.getProperty().getSubProperty().getSubSubProperty();Wie codiert man eine intelligente Koaleszenz in Java?

Betrachten Sie den obigen Code. Ein Objekt besitzt eine Eigenschaft mit einer subProperty, die eine subSubProperty besitzt, auf die mit Getter-Methoden zugegriffen werden kann.

Was können wir tun, in Java wie etwas zu erreichen:

Util.coalesce(object.getProperty().getSubProperty().getSubSubProperty(), defaultSubSubProperty);

org.apache.commons.lang3.ObjectUtils.defaultIfNull hat so etwas wie dieses. Aber das Problem mit dieser Methode ist, dass es nur funktioniert, wenn Property und subProperty nicht null sind. Ich möchte eine Möglichkeit, subSubProperty oder defaultSubSubProperty auch dann, wenn Eigenschaft und subProperty sind null.

Wie können wir das tun?

Antwort

10

können Sie optional nutzen in Java 8.

String s = Optional.ofNullable(object) 
        .map(Type::getProperty) 
        .map(Type2::getSubProperty) 
        .map(Type3::getSubSubProperty) 
        .orElse(defaultValue); 

Sie auch orElseGet(Supplier) oder orElseThrow(Throwable)

+0

Wonder verwenden können. Aber ich habe immer noch ein Problem. Hier ist die Produktion Java Java 7, können wir dies in Java 7 mit einem Jar oder so ähnlich verwenden? – GarouDan

+0

@GarouDan in der Theorie gibt es Backports der Bibliothek, aber ich habe keine verwendet. Ohne den syntaktischen Zucker stelle ich mir vor, eine Bibliothek zu benutzen, um schmerzhafter zu sein, als sie selbst zu schreiben. –

+1

@GarouDan Sie können weiterhin Guavas ['Optional'] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Optional.html) (' ofNullable' -> 'fromNullable',' map' -> 'transform'), aber Sie müssen alle Methodenverweise auf anonyme Unterklassen erweitern, wodurch Ihr Code schrecklich groß wird. –