Java Annotated Monthly – December 2016

The holidays are coming but the news never stops. This month we have articles about Java 8, 9 and beyond as usual, and a mixed bag of fundamentals, popular libraries and other JVM languages. As the end of the year is a good time for retrospectives (or it would be, if we weren’t so busy trying to finish everything before all the parties), we’re also taking a look at what it means to be a competent developer.



Not all elections are doom and gloom.  The 2016 JCP Executive Committee elections are over, and I personally am proud to see the London Java Community re-elected once again. The JCP is continuously improving to provide the kind of standards process a language like Java really needs, and it’s fantastic that user groups are involved in this as well as vendors and individuals, it shows the developer’s voice is important and can be heard.

Beyond Java 9

Just because the language developers are (quite rightly) taking the time to get Java 9 ready for release doesn’t mean the future of Java is entirely on hold, with value types being the most talked-about feature for a post-Java-9 release.

Java 9

Java 9’s big ticket item is obviously Jigsaw, so it’s a good idea to understand the Future of Modularity. It will be particularly interesting to see how Jigsaw modules will interact with Maven, Gradle and IDE modules.

Proposals are still being submitted for Java 9, including ahead of time compilation.

The addition of private methods to interfaces in Java 9 combined with Java 8’s default and static methods on interfaces means it’s important to brush up on design practices like preferring composition over inheritance.

Java 8

IntelliJ IDEA 2016.3 has a whole load of new and updated inspections for Java 8, including one for removeIf. However, it’s important before rushing off an implementing new things to understand the performance implications (video). While we’re on the topic, you may want to look at Java vs C performance (video).

Java 8 features are increasingly supported by popular frameworks, and Streams are becoming a mainstream pattern for processing data. But have you considered how they could be converted to database queries? And how can we have faster functional data structures?

And to see how others are using them, here’s a worked example of stream processing.


Brush up on your knowledge of transient and serialisation, and revisit exception handling with some reminders of features added in Java 7.


We mentioned JUnit 5 a few months ago. This month’s Java Magazine has a whole series of articles on it, to help get you up to speed, and milestone 3 was released in November for you to try.

Automated testing is more flexible with mocks, and now Mockito 2 is out to give you a helping hand, but remember testing isn’t without its pitfalls.

And remember, Android is not exempt from unit testing.


If you use Spring, you’ll want to check out this cheat sheet.  You may also want to watch our screencast showing the Spring updates in IntelliJ IDEA 2016.3, read about how to wire up microservices with Spring Cloud, see these tips on building a Spring Boot API, and watch this presentation on developing a geospatial webservice with Kotlin and Spring Boot (video). We’ll talk more about Reactive Programming later, but for now take a look at how to go reactive with spring data.

For a bit of balance, read why someone might choose Java EE over Spring.

Other Libraries, Frameworks & Languages

Kotlin remains a firm favourite with Android developers. Here’s five things you probably didn’t know and an introduction to Kotlin configuration scripts. Also,  1.1-M03 is out now.

DZone has published a Groovy Ref Card, valuable to both newbies and experienced developers, and find out why Groovy is an Open Source success story.

We talked last month about Reactive Streams, if you’re interested Lightbend have published a free e-book on Designing Reactive Systems, you can watch Reactive Programming for Java Developers (video), look at RxJava by Example and RxRecipes for composition. Reactive is an overloaded term, so it’s useful to read about the differences between Reactive Systems and Reactive Programming.

Continuing the industry buzz words theme, apparently Microservices have a long history. And if you want to be fully-buzz-word-compliant, read about an Event Sourcing, Microservices, CQRS architecture.

To finish this section, here’s 50 Tips and Tricks for Android Studio for the Android devs out there.


This month I’ve seen a strong trend of articles and talks on how to improve as a developer (video), understanding how ethics may play into our job and how some guidelines may help us become more professional.

Can you become an expert developer in 10 000 hours? Can you recognise code that fails the good taste test and do something about it? Do you know the elements of modern Java style? How do you become a better developer? Are there specific things a Java developer should really be good at? What are the current JVM trends, popular frameworks, and trends amongst developers? Is your CV/resume horrible? Once you are in a position to pick your next role, how do you evaluate it?

A common theme in those articles is that communication matters. So does being part of a diverse team, which means that identifying cognitive biases that hinder collaboration will make you a better developer. Many successful companies these days are genuinely focused on inclusion as a competitive advantage.

And finally…

IntelliJ IDEA 2016.3 is out. Check out What’s New (there’s a lot!), and take a look at our series of screencasts on just some of the new features.

Of course, what this means is…


Complete this form and get Java Annotated Monthly delivered fresh to your email.

image description