Introduction to Generics in Java

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.

 

Simple Generics Example

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.

 

Important points to remember about Generics

  1. 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.

  2. 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

  3. Methods can also take generic type as its parameters.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)