The syntax of Generics in Java
- Translate the IndexedList ADT into a generic interface.
- Identify the syntax of Java Generics.
Generics are simple to start with; here is IndexedList ADT with generic base type
public interface IndexedList<T> {
void put(int index, T value);
T get(int index);
int length();
}
Note the three changes:
- The interface name is appended with
<T>(notice the angle brackets). - The data type of
valueis changed toT. - The return type of
getis changed toT.
The T is a placeholder for any type for which a user might want to use IndexedList. There is no significance in calling it T. You can rename it to anything you want (subject to rules of variable naming in Java). However, in most resources, either T or E is used to declare a generic type.
When declaring IndexedList, you must specify the intended base type:
IndexedList<Integer> numbers;
IndexedList<Apple> apples;
Notice the use of angle brackets <> in the above statements.
When you declare numbers as IndexedList<Integer>, you signal your intention to the compiler. All values stored in numbers must be of type Integer. In turn, the compiler will
- ensure that (providing type safety), so attempting to store, e.g., a string in
numberswill result in a compile-time error. - not bother you to (down) cast a value retrieved from the ADT (e.g., through using the
getmethod here).
A note on documenting generics
Generic variables must be documented similar to method parameters.
/**
* IndexedList ADT.
* @param <T> the base type of the items in the IndexedList.
*/
public interface IndexedList<T> {
}
In a way, generics enable types (classes and interfaces) to have parameters.
Generic parameters provide a way for you to re-use the same code with different types.
Resources
You may find the following resources useful: