Engineering Full Stack Apps with Java and JavaScript
Generics language feature in Java allow you to write a class using generic types which can then be substituted with any type before actually using it. Generics allow you to write reusable and type safe code.
For example, you can write a generic linked list. The data in the linked list can be one of String, Integer or any other class type. The actual type needed to be decided only before using it and while creating the class you need to create only one reusable generic class.
Generics is a language feature introduced in Java 1.5, and is extensively used in Java collections framework. Note that while Java collections is a framework and not a language feature, generics is a language feature.
class Node<T> {
T data;
Node next;
}public class NodeTest {
public static void main(String[] args) {
Node<String> n = new Node<>();
n.data = "somestring";}
}
Here T is a type holder.
You can then use Node as:
Node<Integer> n = new Node<>();
You can also use non-generic syntax for most collections (like Node n = new Node()) and this is given for backward compatibility for code and should not be used in newer code.
Integer is the wrapper class for int.
Before Generics java.lang.Object class was used to write generic classes that can accept any type.
However with java.lang.Object class, you cannot control on what types of objects are actually stored in it.
With generics, you can specify a particular type for the generic type and compiler will only allow objects of that particular type to be added to that container. So generics help us in writing type safe code.
A generic type can be used without specifying the type in dymond boxes.
The type is now referred to as raw types.
Example: In the above example, we can write as: Node n = new Node();
Java supports raw types mainly for backward compatibility with older codes prior to Java 1.5
It is a good practice not to mix raw types and generics in your project
Methods can also take generic type as its parameters.