
enerics is one of the hottest features of Sun Microsystems's upcoming JDK 1.5 (Tiger) release. Programmers and researchers have been clamoring for a feature like this for years, and an impatient few have even implemented
their own prototypes already. Generics enables the creation of parameterized classes and methods, allowing Java developers to create custom variations of their code for different types.

Unlike JDK 1.4, Tiger isn't just a set of new standard librariesit features actual changes to the language itself. Generics is the most profound of these changes. Long a part of advanced academic languages, this new feature is a welcome addition to Java.
This article introduces the new generics feature by examining Sun's example pre-release implementation. It demonstrates how to use generics in a sample program, an extensible networked multimedia framework (NMF). Finally, it goes over using generics in the Collections classes.
What Is Generics?
Generics is very similar to C++ templates, both in syntax and semantics. However, like most things in Java that are similar to C++, it is simpler. Since generics has a clear syntax, the following quick example will go a long way in explaining it:
public class Mailbox<Thing>
{
private Thing thing;
// ...
}
This is a fragment from the source code for NMF. The first thing you should notice is the "<Thing>
" following the class name. This is a type parameter, which says you can create variations of the Mailbox
class by providing different types to take the place of Thing
. This means that Mailbox
is a parametric class, a class that takes one or more parameters.
Thing
isn't really a type or classyou haven't created a file called Thing.java
that contains a class definition for Thing
. Rather, you'll have to supply something to
take the place of Thing
. Here's how you instantiate the parametric class:
Mailbox<String> myMailbox = new Mailbox<String>();
Now Mailbox<String>
clearly is the full name for a Java type. It means "the Mailbox
class, with Thing
replaced by String
." You could also use Mailbox<URL>
, which would be "the Mailbox
class, with Thing
replaced by URL
."
In NMF, a Mailbox
is an object that lets you send and receive messages of different types. A Mailbox<URL>
, for example, lets you send and receive URL
s, while a Mailbox<String>
lets you send and receive String
s.
The nice thing about this is that you don't have to create two different classes to send and receive two different kinds of messages. Instead, you can create a single class, parameterized by the type variable Thing
. You simply program this class to send and receive Thing
s. Instantiating the Mailbox
class with various types replaces the Thing
type variable with actual types such as String
and URL
.