What is type erasure in Java generics?

Generics are checked by the compiler, and then the type arguments are erased. At run time a List<String> is only a List. This keeps old code working, but it has effects:

  • You can not write new T(), T.class or instanceof List<String>.
  • You can not make an array of a generic type: new List<String>[10].
  • Primitives are not allowed as type arguments.
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        List<Integer> numbers = new ArrayList<>();
        System.out.println(strings.getClass() == numbers.getClass());
        System.out.println(strings.getClass().getName());
    }
}
Output

true
java.util.ArrayList

See Java Generics.


Learn more about the similar topics:
Tutorials
No Content Found.
Exercises & Assignments
No Content Found.
Interview Questions & Answers
No Content Found.