首页 / JAVA / Java泛型 – 允许混合类型?
Java泛型 – 允许混合类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java泛型 – 允许混合类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1619字,纯文字阅读大概需要3分钟。
内容图文
![Java泛型 – 允许混合类型?](/upload/InfoBanner/zyjiaocheng/758/ff2159adc6634981b0ce6fab729fe6d8.jpg)
我之前正在运行一些测试,但无法找到解释为什么这段代码能够完成它的工作:
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList(Arrays.asList(Double.valueOf(0.1234)));
System.out.println(list.get(0)); //prints 0.1234
Object d = list.get(0);
System.out.println(d.getClass()); // prints class java.lang.Double
System.out.println(list.get(0).getClass()); // ClassCastException
}
}
这引出了一些问题:
>为什么List< Integer>首先接受一个Double(它应该编译)吗?
>为什么第二次打印工作而不是第三次打印,虽然看起来他们正在做同样的事情?
编辑
我理解以下两个陈述:
List aList = new ArrayList(); //I can add any objects in there
List<Integer> aList = new ArrayList<Integer>(); //I can only add something that extends Integer in there
但是我不明白为什么这个被授权以及为什么它在运行时实际上有效,尽管有些操作会产生ClassCastException – 我希望在上面发布的代码的第一行有一个ClassCastException:
List<Integer> aList = new ArrayList(); //I can any objects in there
解决方法:
如果你写
... new ArrayList<Integer>(...
相反,它会导致编译器异常.
关于它的工作原理:
System.out.println(list.get(0)); //prints 0.1234
该方法Object.toString()是在双和整数相同的(而且由于的System.out.println()预计,这是投不进一个整数(对象编译器优化抛弃))
Object d = list.get(0);
System.out.println(d.getClass()); // prints class java.lang.Double
.getClass()也是如此.在这里,优化器再次放弃了演员.
System.out.println(list.get(0).getClass()); // ClassCastException
这实际上会从列表中创建一个Integer并且失败.它执行转换,因为优化器认为它需要这样做,因为它不是显而易见的,它不需要.
如果您将最后一行更改为:
System.out.println(((Object)list.get(0)).getClass());
有用 :)
内容总结
以上是互联网集市为您收集整理的Java泛型 – 允许混合类型?全部内容,希望文章能够帮你解决Java泛型 – 允许混合类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。