Unbounded Types Erasure

Java Compiler replaces type parameters in generic type with Object if unbounded type parameters are used.

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"));
  System.out.printf("Integer Value :%d\n", integerBox.get());
  System.out.printf("String Value :%s\n", stringBox.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"));
  System.out.printf("Integer Value :%d\n", integerBox.get());
  System.out.printf("String Value :%s\n", stringBox.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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *