Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Java 8 Configuration Defaults Using Optional

DZone's Guide to

Java 8 Configuration Defaults Using Optional

In pursuit of more fluent code, this article looks into handling string conversions of configuration data using Java 8's Optional.

· Java Zone
Free Resource

Learn how to troubleshoot and diagnose some of the most common performance issues in Java today. Brought to you in partnership with AppDynamics.

Somedays you come across some code and think "that's pretty; why didn't I think of that?" So my long-time colleague Mark Warner has a nice twist on the standard name/value store pattern using method references to deal with converting from a String.

int size = store.getProperty("cache.limit", 500, Integer::parseInt);
 boolean enabled = store.getProperty("cache.enabled", true, Boolean::getBoolean);

I took his example and refactored it slightly to return Optional, and I ended up with the following:

public Optional<String> getProperty(
    String propertyName) {
    return Optional.ofNullable(map.get(propertyName));
}

public <T> Optional<T> getProperty(
    String propertyName, 
    ThrowingFunction<String,? extends T,? extends Exception> func ) {

        return getProperty(propertyName).map(val -> {
            try {
            return func.apply( val );
        } catch ( Exception e ) {
            LOGGER.severe( () -> "Invalid property transform, will default " + e.getMessage() );
            return null;
        }
    });
}

This means that the default value ends up being provided by the Optional, which is a nice application of OAOO.

int size = store.getProperty("cache.limit", Integer::parseInt).orElse(500);
 boolean enabled = store.getProperty("cache.enabled", Boolean::getBoolean).orElse(true);

I think this is even tidier, but it does depend on how you feel about using Optional.

Understand the needs and benefits around implementing the right monitoring solution for a growing containerized market. Brought to you in partnership with AppDynamics.

Topics:
java ,optional

Published at DZone with permission of Gerard Davison, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}