Generic Classes/Interface in Java
Java Generics Tutorial List :
1:Introduction to Generics in Java 2:Generic Map In Java Tutorial 3:Generic Classes/Interface in Java
Generic Classes/Interface in Java :
A generic class in Java is a class that can operate on a specific type specified by the programmer at compile time.To achieve this class will uses type parameters that act as variables that represent types (such as int or String). Normally we will use T type parameter to create the generic class of specific type.To create a generic class, you list the type parameter after the class name in angle brackets.
The syntax for creating a generic class is given below.
class Department<T>
In the above class the T type indicates that it can refer to any type (like String, Integer, Employee etc.). The type you specify for the class, will be used to store and retrieve the data.
Example of Generic Class with single type parameter
In this example, we created a class called Employee, which takes a generic type parameter T. The constructor, getter and setter work on the parametrized type T. The toString() reveals the actual type of the content.
Employee.java
package com.example; public class Employee<T> { private T content; // Constructor public Employee(T content) { this.content = content; } public T getContent() { return content; } public void setContent(T content) { this.content = content; } public String toString() { return content + " (" + content.getClass() + ")"; } }
The following test program creates Employees with various types (String, Integer and Double).
Test.java
package com.example; public class Test { public static void main(String[] args) { Employee<String> emp = new Employee<String>("Hello"); String str = emp.getContent(); // no explicit downcasting needed System.out.println(emp); Employee<Integer> emp1 = new Employee<Integer>(123); // autobox int to // Integer int i = emp1.getContent(); // downcast to Integer, auto-unbox to int System.out.println(emp1); Employee<Double> emp2 = new Employee<Double>(55.66); // autobox double // to Double double d = emp2.getContent(); // downcast to Double, auto-unbox to // double System.out.println(emp2); } }
Output
Hello (class java.lang.String) 123 (class java.lang.Integer) 55.66 (class java.lang.Double)
Generics Type Naming Convention
Generics comes with its own naming conventions. Usually type parameter names are single, upper-case letters to make it easily distinguishable from java variables. The most commonly used type parameter names are:
- T - Type
- E - Element
- K - Key
- N - Number
- V - Value(used in Map)
- S,U,V - 2nd, 3rd, 4th types
Example of Generic Class with two type parameter
In this example we will create a simple generics class with two type parameters.Here we defined two types of parameters called U & V, separated by ",". You can define multiple type parameters separated by ",".
Student.java
package com.example; public class Student<U, V> { // type U object reference private U objUreff; // type V object reference private V objVreff; // constructor to accept object type U and object type V public Student(U objU, V objV) { this.objUreff = objU; this.objVreff = objV; } public void printTypes() { System.out.println("U Type: " + this.objUreff.getClass().getName()); System.out.println("V Type: " + this.objVreff.getClass().getName()); } }
Test.java
package com.example; package com.example; public class Test { public static void main(String a[]){ Student<String, Integer> student = new Student<String, Integer>("Mukesh", 110); student.printTypes(); } }
Output
U Type: java.lang.String V Type: java.lang.Integer
In Next Article we will discuss about generics wildcard in java.
Related Articles
Related Articles