类型擦除的定义:编译通过后,准备进入JVM运行时,就不再有类型参数的概念,换句话说:每定义一个泛型类型,JVM会自动提供一个对应的原生类;
public class Holder4<T> { private T a; private T b; private T c; public Holder4(T a, T b, T c) { this.a = a; this.b = b; this.c = c; } public T getA() { return a; } public T getB() { return b; } public T getC() { return c; } public void setA(T a) { this.a = a; } public void setB(T b) { this.b = b; } public void setC(T c) { this.c = c; } public static void main(String[] args) { Holder4<Automobile> holder4 = new Holder4<>(new Automobile(),new Automobile(), new Automobile()); Automobile a = holder4.getA(); //编译器帮忙转型,不需要显式转型 Automobile b = holder4.getB(); Automobile c = holder4.getC(); } }
在Java中,每定义一个泛型类型,就会自动提供一个对应的原始类型,例如:
public class Holder4Raw { private Object a; private Object b; private Object c; public Holder4Raw(Object a, Object b, Object c) { this.a = a; this.b = b; this.c = c; } public Object getA() { return a; } public Object getB() { return b; } public Object getC() { return c; } public void setA(Object a) { this.a = a; } public void setB(Object b) { this.b = b; } public void setC(Object c) { this.c = c; } public static void main(String[] args) { Holder4Raw holder4Raw = new Holder4Raw(new Automobile(),new Automobile(), new Automobile()); Automobile a = (Automobile) holder4Raw.getA(); //显示的转型 Automobile b = (Automobile) holder4Raw.getB(); Automobile c = (Automobile) holder4Raw.getC(); } }