加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Java 泛型机制允许程序员在编译时检验到非法的类型

发布时间:2021-05-27 01:06:14 所属栏目:编程 来源:互联网
导读:Java 泛型(generics)是 JDK 5 中引入的一个新特征, 泛型提供了编译时范例安详检测机制,该机制应承措施员在编译时检测到犯科的范例。 简朴领略就是:泛型指定编

Java 泛型(generics)是 JDK 5 中引入的一个新特征, 泛型提供了编译时范例安详检测机制,该机制应承措施员在编译时检测到犯科的范例。

简朴领略就是:泛型指定编译时的范例,镌汰运行时因为工具范例不匹配激发的非常。其首要用途是进步我们的代码的复用率。

我们Java尺度库中的ArrayList就是泛型行使的典范应用:

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { 

        

      ...... 

 

    public ArrayList(Collection<? extends E> c) { 

        elementData = c.toArray(); 

        if ((size = elementData.length) != 0) { 

            // c.toArray might (incorrectly) not return Object[] (see 6260652) 

            if (elementData.getClass() != Object[].class) 

                elementData = Arrays.copyOf(elementData, size, Object[].class); 

        } else { 

            // replace with empty array. 

            this.elementData = EMPTY_ELEMENTDATA; 

        } 

    } 

 

    public void sort(Comparator<? super E> c) { 

        final int expectedModCount = modCount; 

        Arrays.sort((E[]) elementData, 0, size, c); 

        if (modCount != expectedModCount) { 

            throw new ConcurrentModificationException(); 

        } 

        modCount++; 

    } 

    

  ..... 

 

    public E get(int index) { 

        rangeCheck(index); 

 

        return elementData(index); 

    } 

 

    public boolean add(E e) { 

        ensureCapacityInternal(size + 1);  // Increments modCount!! 

        elementData[size++] = e; 

        return true; 

    } 

 

 源码中,ArrayList中的E称为范例参数变量,而整个ArrayList我们称为泛型范例。 我们可以指定除根基范例之外的任何范例,如:ArrayList。

源码中Collection 中? 通配符范例 暗树模例的上界,暗示参数化范例的也许是T 或是 T的子类。

源码中Comparator 暗树模例下界(Java Core中叫超范例限制),暗示参数化范例是此范例的超范例(父范例),直至Object。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读