A nice feature of the Java 7 try-with-resources statement and the AutoCloseable type that was introduced to work with this statement is the fact that static code analysis tools can detect resource leaks. For instance, Eclipse: When you have the above configuration and you try running the following program, you'll get three warnings: public static … Continue reading A Subtle AutoCloseable Contract Change Between Java 7 and Java 8
Category: java 8
The Danger of Subtype Polymorphism Applied to Tuples
Java 8 has lambdas and streams, but no tuples, which is a shame. This is why we have implemented tuples in jOOλ - Java 8's missing parts. Tuples are really boring value type containers. Essentially, they're just an enumeration of types like these: public class Tuple2<T1, T2> { public final T1 v1; public final T2 … Continue reading The Danger of Subtype Polymorphism Applied to Tuples
Comparing Imperative and Functional Algorithms in Java 8
Mario Fusco's popular tweet impressively shows what the main difference between imperative and functional approaches to similar algorithms really is: https://twitter.com/mariofusco/status/571999216039542784 Both algorithms do the same thing, they're probably equally fast and reasonable. Yet, one of the algorithms is much easier to write and read than the other. The difference lies in the fact that … Continue reading Comparing Imperative and Functional Algorithms in Java 8
How to use Java 8 Functional Programming to Generate an Alphabetic Sequence
I've stumbled upon an interesting Stack Overflow question by user "mip". The question was: I'm looking for a way of generating an alphabetic sequence: A, B, C, ..., Z, AA, AB, AC, ..., ZZ. This can be quickly recognised as the headings of an Excel spreadsheet, which does precisely that: . So far, none of … Continue reading How to use Java 8 Functional Programming to Generate an Alphabetic Sequence
Divided we Stand: Optional
Our recent article "NULL is Not The Billion Dollar Mistake. A Counter-Rant" got us a lot of reads, controversial comments, and a 50/50 upvote / downvote ratio pretty much everywhere a blog post can be posted and voted on. This was expected. Objectively, NULL is just a "special" value that has been implemented in a … Continue reading Divided we Stand: Optional
Common SQL Clauses and Their Equivalents in Java 8 Streams
Functional programming allows for quasi-declarative programming in a general purpose language. By using powerful fluent APIs like Java 8's Stream API, or jOOλ's sequential Stream extension Seq or more sophisticated libraries like vavr or functionaljava, we can express data transformation algorithms in an extremely concise way. Compare Mario Fusco's imperative and functional version of the … Continue reading Common SQL Clauses and Their Equivalents in Java 8 Streams
Java 8’s Method References Put Further Restrictions on Overloading
Method overloading has always been a topic with mixed feelings. We've blogged about it and the caveats that it introduces a couple of times: You Will Regret Applying Overloading with Lambdas! Keeping things DRY: Method overloading Why Everyone Hates Operator Overloading API Designers, be Careful There are two main reasons why overloading is useful: To … Continue reading Java 8’s Method References Put Further Restrictions on Overloading
What’s Even Harder Than Dates and Timezones? Dates and Timezones in SQL / JDBC!
(Notice, this post has been written a while ago. jOOQ now supports JSR 310 data types) There was an interesting discussion recently on the jOOQ mailing list about jOOQ's current lack of out-of-the-box support for TIMESTAMP WITH TIME ZONE data types. No one said that date, time and timezones are easy! There's an amusing piece … Continue reading What’s Even Harder Than Dates and Timezones? Dates and Timezones in SQL / JDBC!
Querying Your Database from Millions of Fibers (Rather than Thousands of Threads)
jOOQ is a great way to do SQL in Java and Quasar fibers bring a much improved concurrency We're excited to announce another very interesting guest post on the jOOQ Blog by Fabio Tudone from Parallel Universe. Parallel Universe develops an open-source stack that allows developers to easily code extremly concurrent application on the JVM. … Continue reading Querying Your Database from Millions of Fibers (Rather than Thousands of Threads)
Do Not Make This Mistake When Developing an SPI
Most of your code is private, internal, proprietary, and will never be exposed to public. If that's the case, you can relax - you can refactor all of your mistakes, including those that incur breaking API changes. If you're maintining public API, however, that's not the case. If you're maintaining public SPI (Service Provider Interfaces), … Continue reading Do Not Make This Mistake When Developing an SPI
