Java 的泛型仅仅在编译期有效,在运行期则会被擦除,也就是说所有的泛型参数类型在编译后都会被清除掉。这就是所谓的类型擦除。
原文地址:https://blog.csdn.net/qq_21556263/article/details/83211891
Java的泛型是JDK5带来的新特性,它有如下的优点:
但是,为了做到向下兼容,Java中的泛型仅仅是一个语法糖,并不是C++那样的真泛型。
如何证明呢?我们可以看看下面的例子
在这个例子中,我们定义了一个List<Integer>
集合,我们可以调用add方法向其中加入Integer
类型的值。
如果我们像下面一样调用add方法向里面加入String
,当然会报错:
public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>();
list.add("str");
}
错误信息如下:
add (java.lang.Integer) in List cannot be applied to (java.lang.String)
显然,我们是没法直接向其中加入String类型的值的。
不过,我们可以另辟蹊径。我们尝试通过反射,间接地调用add方法,向这个List<Integer>
中加入String
类型的值。