为什么在Java中可以进行以下操作?
Integer[] ints = (Integer[])new Comparable[10];
但是它在运行时获取
ClassCastException
。用new
接口数组的用例是什么? 最佳答案
要回答特定问题:
Comparable toComplare[] = new Comparable[10];
为什么不创建一个数组,该数组将允许您存储实现Comparable接口的任何对象?
关键是:接口表示“通用功能”-仅从该“视图”查看对象可能会有所帮助。
当然,存储在该数组中的对象总是属于某个“真实”类-但是所有这些对象都将实现
Comparable
接口提供的功能。因此,您可以执行以下操作:
toCompare[0] = new Integer(5);
toCompare[1] = new BigDecimal("3.2");
...
我并不是说这是您经常使用的东西,而是说-它使您可以在对象的功能的特定,特定“视图”下“收集”对象。还值得指出:拥有这样的数组对而不是意味着您将能够执行以下操作:
toCompare[0].compareTo(toCompare[1]);
成功!
除此之外:强制转换总是以某种方式暗示您,程序员知道编译器不知道的东西。因此,编译器会后退并让您执行此操作-假设您知道自己在做什么。但是,由于您在问题中显示的代码显然是不正确的,因此现实又在运行时被您所困扰。是的,有可能在编译时确定给定的代码不正确。