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

Java – 通用类型和集合

发布时间:2020-12-15 01:07:58 所属栏目:Java 来源:网络整理
导读:参见英文答案 Java generics type erasure: when and what happens?????????????????????????????????????7个 我正在尝试学习泛型类型的使用,当我尝试使用某些代码行时,我注意到了一些奇怪的东西. 第一段代码位于名为“A”的类中: public void func(int k,L

参见英文答案 > Java generics type erasure: when and what happens?????????????????????????????????????7个
我正在尝试学习泛型类型的使用,当我尝试使用某些代码行时,我注意到了一些奇怪的东西.

第一段代码位于名为“A”的类中:

public void func(int k,List list) {
    list.add(9);
    list.add(true);
    list.add("a string");
    }

第二段代码在main函数内的不同类中:

List

运行代码会导致打印以下行:

[14]

[14,9,true,a string]

这让我非常困惑,因为arr是一个Integer类型的ArrayList,它如何包含boolean和String类型的对象?是否将函数func中的列表转换为原始类型(这意味着它变为泛型类型的Object)?如果是这样,怎么可能,因为你不能这样做,例如:List< Integer> arr = new ArrayList< Object>();?

希望对此有所澄清,也许它会帮助我更好地掌握这类通用类型的主题.谢谢!

最佳答案
Java不允许创建通用数组. Java Collection Classes主要使用Object数组实现. ArrayList类可能如下所示

public class ArrayList

在创建ArrayList的新实例时,会创建一个可以保存任何类型对象的新Object []数组.只能通过使用通用类型参数来实现类型安全.

由于List没有提供任何Type参数,因此它使用了rawtype,并且可以将任何内容添加到列表中.因此,请始终确保推断模板参数以保持类型安全.

public void func(int k,List

你永远不应该使用rawtypes.根据您的编译器设置,将省略警告.
最好使用(绑定/未绑定)通配符.

(编辑:李大同)

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

    推荐文章
      热点阅读