Hello, my name is Luke Bunselmeyer. I’m a fun loving Full-Stack engineer who delights in polyglot programming from back-end to front-end, Java to JavaScript, Web services to Web development.

Many languages support concise and self documenting method calls. In JavaScript we typically use object literals to shorten method signatures. Here’s a contrived createCookie example…

/**
 * Contrived method to create a HTTP cookie
 * @param {String} name     Name of the cookie
 * @param {String} value    Value of the cookie
 * @param {Object} options  Additional cookie parameters
 */
function createCookie(name, value, options) {
    var cookie = new Cookie(name, value);
    return _.extend(cookie, options || {});
}

And we can call the method like so…

var c = createCookie('foo', 'bar', {
    path: '/aa/bb',
    expires: new Date(2015, 2, 18)
});

In comparison, the corresponding method signature in Java 1.7 blights our eyes…

Cookie createCookie(String name, String value, String path, Long maxAge, Boolean secure, Boolean httpOnly, String comment);

And calling it further assaults our asthetics. What’s with all those null’s!!!???

Cookie c = createCookie("foo", "bar", "/aa/bb", Long.MAX_VALUE, null, null, null);

Fortunately, with lambda support now baked into Java 1.8, we can use the Consumer functional interface to sweeten up createCookie

public Cookie createCookie(String name, String value, Consumer<Cookie> cookieOptions) {
    Cookie cookie = new DefaultCookie(name, value);
    cookieOptions.accept(cookie);
    return cookie;
}

Now we can call createCookie drama free…

Cookie c = createCookie("foo", "bar", (cookie) -> {
   cookie.setPath("/aa/bb");
   cookie.setMaxAge(Long.MAX_VALUE);
   cookie.setSecure(true);
});

While this is just a simple and contrived example, I feel it illustrates how Java 1.8 opens the door for many popular coding patterns practiced throughout many other language communities. I’m excited to see how the Java community embraces these new options.

Shameless plug

If you’re interested in my other hacks with Java 1.8, please check out my most recent naive pursuit: Hitch: Middleware for Java.

References