为什么在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]);

成功!

除此之外:强制转换总是以某种方式暗示您,程序员知道编译器不知道的东西。因此,编译器会后退并让您执行此操作-假设您知道自己在做什么。但是,由于您在问题中显示的代码显然是不正确的,因此现实又在运行时被您所困扰。是的,有可能在编译时确定给定的代码不正确。

09-30 18:33
查看更多