大神进!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;
}
编译的时候会被擦除掉 本帖最后由 嗳魅 于 2020-1-15 14:52 编辑
看下泛型具体用法 应该就可以明白了。(个人理解,希望帮到你)
可以这样理解: 在你声明一个List<String >的时候,是通过泛型,对List集合进行了编译时异常设置。
帮助理解:
被写在编译层了吧,这不是语法问题所以你去查代码找不到 泛型就是未知的数据类型,可以用T或E表示。你一创建list对象指定泛型为String,就相当于源码中的T或E变成了String,这样就起到限制效果了。如果不指定,默认就是祖宗类型Object
页:
[1]