java读取整数列表_java – 从整数列表的索引打印字符串

我正在运行这一小段代码:

List abc = new ArrayList();

abc.add("something");

List raw = abc;

List def = raw;

System.out.println(def.get(0));

我不明白为什么当包含String成员的列表被分配给整数列表时它不会抛出异常.而且,整数列表如何存储和打印字符串?有人可以帮帮我吗?

解决方法:

这就是你不应该使用原始类型的原因.

当你这样做

List raw = abc;

你自己用列表擦除类型.所以它们没有类型,也没有编译器的错误.要获得泛型的好处,您应该避免使用原始类型.

并且还考虑阅读大约Type Erasing.在运行时,列表不知道他们的类型.类型被删除,它们只是获得列表中的任何可用内容.

您期望的错误是编译器错误,同时您避免首先提供类型.因此没有错误.

如果您确实想要查看异常,请尝试将当前列表中的元素分配给Integer.虽然编译器不会给你任何错误,但在运行时类型会匹配并且你会遇到异常.

如果你看一下Raw Types docs,你会看到几乎相同的例子

Box stringBox = new Box<>();

Box rawBox = stringBox;

rawBox.set(8); // warning: unchecked invocation to set(T)

The warning shows that raw types bypass generic type checks, deferring the catch of unsafe code to runtime. Therefore, you should avoid using raw types.

标签:raw-types,java,generics

来源: https://codeday.me/bug/20190724/1522050.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值