一闪一闪233 发表于 2020-1-15 14:13

大神进!Java 泛型是怎样起到限制类型的效果的?比如list

List<String> list = new ArrayList<String>();

像这样声明一个list,这个list只能添加String。底层是怎么做到的呢?我观察了底层代码并没有找到相关的限制。

这是底层新增:
/**
   * Appends the specified element to the end of this list.
   *
   * @Param e element to be appended to this list
   * @Return <tt>true</tt> (as specified by {@link Collection#add})
   */
    public boolean add(E e) {
      ensureCapacityInternal(size + 1);// Increments modCount!!
      elementData = e;
      return true;
    }

这是底层arraylist构造函数:
/**
   * Constructs an empty list with an initial capacity of ten.
   */
    public ArrayList() {
      this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

namedlxd 发表于 2020-1-15 14:20

编译的时候会被擦除掉

KamiMao 发表于 2020-1-15 14:36

嗳魅 发表于 2020-1-15 14:50

本帖最后由 嗳魅 于 2020-1-15 14:52 编辑

看下泛型具体用法 应该就可以明白了。(个人理解,希望帮到你)
可以这样理解: 在你声明一个List<String >的时候,是通过泛型,对List集合进行了编译时异常设置。
帮助理解:

saidom1949 发表于 2020-1-15 17:52

被写在编译层了吧,这不是语法问题所以你去查代码找不到

无限苦肉盖神 发表于 2020-1-22 12:22

泛型就是未知的数据类型,可以用T或E表示。你一创建list对象指定泛型为String,就相当于源码中的T或E变成了String,这样就起到限制效果了。如果不指定,默认就是祖宗类型Object
页: [1]
查看完整版本: 大神进!Java 泛型是怎样起到限制类型的效果的?比如list