To take a break from a project I was working on yesterday I gave my brain a little exercise to see if I could remember how to create a Java class that used the Java 5 Generics magic. Since I’ve used Scala a lot recently, I decided to create a Java version of the Scala Tuple class.
The Tuple class simply stores two values, which are often key/value pairs. Beginning with the end in mind, here’s how you would typically use a Tuple in Java (if it existed):
Tuple<String, Integer> t = new Tuple<String, Integer>("age", 41);
As you can see, with Generics you define the variable types on the fly, and in this case I choose to define my key as a String, and my value as an Integer.
My Generics example class
While this gives you a lot of power, defining my example Generics class is actually fairly simple:
class Tuple<K, V>
{
private final K k;
private final V v;
public Tuple(K key, V value) {
k = key;
v = value;
}
public String toString() {
return String.format("KEY: '%s', VALUE: '%s'", k, v);
}
}
As you can see, following the Generics specification, I add my field types to the “class” definition line, then use the same strings “K” and “V” in my class where I would normally declare a class type like String, Integer, Float, etc.
A Generics example class
If you want to experiment with this on your own, here’s the complete source code for my Java Generics example class:
public class GenericsTest {
public static void main(String[] args) {
Tuple<String, Integer> t = new Tuple<String, Integer>("foo", 1);
System.out.println(t);
}
}
class Tuple<K, V>
{
private final K k;
private final V v;
public Tuple(K key, V value) {
k = key;
v = value;
}
public String toString() {
return String.format("KEY: '%s', VALUE: '%s'", k, v);
}
}
Resources
And here are two links to two good Java Generics documentation:
I hope this Generics example has been helpful - enjoy!

