Java Generics Tutorial
Selected Reading
- Java Generics - Discussion
- Java Generics - Useful Resources
- Java Generics - Quick Guide
- Java Generics - No Overload
- Java Generics - No Exception
- Java Generics - No Array
- Java Generics - No instanceOf
- Java Generics - No Cast
- Java Generics - No Static field
- Java Generics - No Instance
- Java Generics - No Primitive Types
- Java Generics - Methods Erasure
- Unbounded Types Erasure
- Java Generics - Bound Types Erasure
- Java Generics - Types Erasure
- Generics - Guidelines for Wildcards
- Lower Bounded Wildcards
- Generics - Unbounded Wildcards
- Upper Bounded Wildcards
- Java Generics - Generic Map
- Java Generics - Generic Set
- Java Generics - Generic List
- Java Generics - Multiple Bounds
- Bounded Type Parameters
- Java Generics - Raw Types
- Java Generics - Parameterized Types
- Java Generics - Multiple Type
- Java Generics - Generic Methods
- Java Generics - Type inference
- Type Parameter Naming Conventions
- Java Generics - Generic Classes
- Java Generics - Environment Setup
- Java Generics - Overview
- Java Generics - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Java Generics - Methods Erasure
Java Generics - Generic Methods Erasure
Java Compiler replaces type parameters in generic type with Object if unbounded type parameters are used, and with type if bound parameters are used as method parameters.
Example
package com.tutorialspoint; pubpc class GenericsTester { pubpc static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); Box<String> stringBox = new Box<String>(); integerBox.add(new Integer(10)); stringBox.add(new String("Hello World")); printBox(integerBox); printBox1(stringBox); } private static <T extends Box> void printBox(T box) { System.out.println("Integer Value :" + box.get()); } private static <T> void printBox1(T box) { System.out.println("String Value :" + ((Box)box).get()); } } class Box<T> { private T t; pubpc void add(T t) { this.t = t; } pubpc T get() { return t; } }
In this case, java compiler will replace T with Object class and after type erasure,compiler will generate bytecode for the following code.
package com.tutorialspoint; pubpc class GenericsTester { pubpc static void main(String[] args) { Box integerBox = new Box(); Box stringBox = new Box(); integerBox.add(new Integer(10)); stringBox.add(new String("Hello World")); printBox(integerBox); printBox1(stringBox); } //Bounded Types Erasure private static void printBox(Box box) { System.out.println("Integer Value :" + box.get()); } //Unbounded Types Erasure private static void printBox1(Object box) { System.out.println("String Value :" + ((Box)box).get()); } } class Box { private Object t; pubpc void add(Object t) { this.t = t; } pubpc Object get() { return t; } }
In both case, result is same −
Output
Integer Value :10 String Value :Hello WorldAdvertisements