关于Java泛型的类型参数的强制转换?

发布于 2022-09-12 03:07:22 字数 768 浏览 36 评论 0

以下是ArrayList<E>类中一段源码,众所周知此类是泛型类,但是会出现泛型擦除,问题就是return (E) elementData[index]中这个(E)岂不是无用了?

    transient Object[] elementData; // non-private to simplify nested class access
    

    // Positional Access Operations

    @SuppressWarnings("unchecked")
    E elementData(int index) {
        return (E) elementData[index];
    }

    /**
     * Returns the element at the specified position in this list.
     *
     * @param  index index of the element to return
     * @return the element at the specified position in this list
     * @throws IndexOutOfBoundsException {@inheritDoc}
     */
    public E get(int index) {
        rangeCheck(index);

        return elementData(index);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

请你别敷衍 2022-09-19 03:07:22

有用的,因为前面 elementData 声明为 Object[] 了。

烟凡古楼 2022-09-19 03:07:22

new arraylist的时候 传入 E的具体类型
E是你add的时候传入的 元素类型是E, 数据是存入到 transient Object[] elementData 里面
不强转 的话 类型不匹配会报编译错误。

南城追梦 2022-09-19 03:07:22

泛型就是语法糖,用于编译阶段的,如果类型不匹配编译错误,帮助开发者更容易发现问题,跟运行时没什么关系。

抱猫软卧 2022-09-19 03:07:22

没有强转(E),编译不通过啊。
elementDataObject类型,而返回值是E类型。
编译通过后是不需要了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文