吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1261|回复: 5
收起左侧

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

[复制链接]
一闪一闪233 发表于 2020-1-15 14:13
[Java] 纯文本查看 复制代码
List<String> list = new ArrayList<String>();


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

这是底层新增:
[Java] 纯文本查看 复制代码
/**
     * Appends the specified element to the end of this list.
     *
     * [url=home.php?mod=space&uid=952169]@Param[/url] e element to be appended to this list
     * [url=home.php?mod=space&uid=155549]@Return[/url] <tt>true</tt> (as specified by {[url=home.php?mod=space&uid=282837]@link[/url] Collection#add})
     */
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }


这是底层arraylist构造函数:
[Java] 纯文本查看 复制代码
/**
     * 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集合进行了编译时异常设置。
帮助理解:

示例代码

示例代码

泛型作用

泛型作用

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
一闪一闪233 + 1 + 1 谢谢@Thanks!

查看全部评分

saidom1949 发表于 2020-1-15 17:52
被写在编译层了吧,这不是语法问题所以你去查代码找不到
无限苦肉盖神 发表于 2020-1-22 12:22
泛型就是未知的数据类型,可以用T或E表示。你一创建list对象指定泛型为String,就相当于源码中的T或E变成了String,这样就起到限制效果了。如果不指定,默认就是祖宗类型Object
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 21:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表