我正在辅导AP Java的一名高中生,她问我一个关于"双重铸造"的问题.我以前从未听说过这个词,但显然她的老师希望她知道这个即将到来的决赛.
她的老师提供的示例是,如果您想将Integer转换为String,则必须执行以下操作才能获得编译器错误:
Integer i = new Integer(5);
String s = (String)(Object) i;
Run Code Online (Sandbox Code Playgroud)
问题是:你想在现实生活中什么时候做到这一点?
老师只提供了导致运行时错误的示例.此外,我从来没有真正知道有这个术语,但这样做似乎是一个坏主意,因为当两种类型不兼容时只会出现错误.
谢谢!
是的,我很确定这不是一件事.没有必要进行双重投射 - 它可能会摆脱关于不安全投射的编译警告(在这种情况下你可能做错了),但是否则这是不对的.
我的意思是,有自动toString调用println("" + i),但即使这样你也不需要先投射到一个物体......
编辑:在读完汤姆的答案后,我突然不确定这个答案 - 原语和(特别是)泛型实际上可以使用它.我没有马上测试任何东西的能力,但任何人阅读这个答案应该绝对看看他(和可能给予好评吧).
但是,我会坚持认为没有(或者至少是极少数和很远的)这样做的好理由,并且所提供的示例当然与它无关.
虽然"双重铸造"肯定不是一个常用的术语,你不应该看起来任何类型的参考,你应该知道会发生什么(a ClassCastException).
为了完整起见,在某些情况下,它不会是CCE:
null.Object到Integer[拆箱] int,或int[有损] byte到[正] char)List<String>到Object到List<Integer>.