
- Generics - Home
- Generics - Overview
- Generics - Environment Setup
- Examples - Generic Classes
- Generics - Generic Classes
- Type Parameter Naming Conventions
- Generics - Type inference
- Generics - Generic Methods
- Generics - Multiple Type Parameters
- Generics - Parameterized Types
- Generics - Raw Types
- Examples - Bounded Type Parameters
- Bounded Type Parameters
- Generics - Multiple Bounds
- Examples - Collections
- Generics - Generic List
- Generics - Generic Set
- Generics - Generic Map
- Examples - Wild Cards
- Upper Bounded Wildcards
- Generics - Unbounded Wildcards
- Lower Bounded Wildcards
- Generics - Guidelines for Wildcards
- Type Erasure
- Generics - Generic Types Erasure
- Generics - Bound Types Erasure
- Unbounded Types Erasure
- Generics - Generic Methods Erasure
- Restrictions on Generics
- Generics - No Primitive Types
- Generics - No Instance
- Generics - No Static field
- Generics - No Cast
- Generics - No instanceOf
- Generics - No Array
- Generics - No Exception
- Generics - No Overload
- Generics Useful Resources
- Generics - Quick Guide
- Generics - Useful Resources
- Generics - Discussion
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; public class GenericsTester { public 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("Value: " + box.get()); } private static <T> void printBox1(T box){ System.out.println("Value: " + ((Box)box).get()); } } class Box<T> { private T t; public void add(T t) { this.t = t; } public 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; public class GenericsTester { public 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("Value: " + box.get()); } //Unbounded Types Erasure private static void printBox1(Object box){ System.out.println("Value: " + ((Box)box).get()); } } class Box { private Object t; public void add(Object t) { this.t = t; } public Object get() { return t; } }
In both case, result is same −
Output
Integer Value :10 String Value :Hello World
Advertisements