首页 > 解决方案 > Java泛型中将类型擦除为对象

问题描述

类型擦除可以解释为仅在编译时强制执行类型约束并在运行时丢弃元素类型信息的过程。

public static  <E> boolean containsElement(E [] elements, E element){
    for (E e : elements){
        if(e.equals(element)){
            return true;
        }
    }
    return false;
}

编译器将未绑定的类型 E 替换为实际的 Object 类型:

public static  boolean containsElement(Object [] elements, Object element){
    for (Object e : elements){
        if(e.equals(element)){
            return true;
        }
    }
    return false;
}

我担心的是,如果在编译时使用泛型类型成功验证了集合加载检查,那么在运行时转换generic specified type为有什么意义呢?Object因为避免类型问题的主要目的在编译时就已经解决了。

标签: javagenerics

解决方案


推荐阅读