为什么有可能新建一个接口数组

use*_*791 3 java arrays casting interface

为什么Java中可以使用以下内容?

Integer[] ints = (Integer[])new Comparable[10];
Run Code Online (Sandbox Code Playgroud)

但它ClassCastException在运行时获得.new接口数组的用例是什么?

Gho*_*ica 6

回答具体问题:

Comparable toComplare[] = new Comparable[10];
Run Code Online (Sandbox Code Playgroud)

为什么不创建一个允许您存储实现Comparable接口的任何对象的数组?!

关键是:界面表示"通用功能" - 仅从 "视图"中查看对象可能会有所帮助.

当然,存储在该数组中的对象总是具有某种"真实"类 - 但所有这些对象都将实现Comparable接口提供的功能.

所以你可以这样做:

toCompare[0] = new Integer(5);
toCompare[1] = new BigDecimal("3.2");
...
Run Code Online (Sandbox Code Playgroud)

我并不是说这是你经常使用的东西,但正如所说 - 它允许你在他们能力的某个特定"视图"下"收集"对象.这也是值得指出的是:具有这样一种阵列就不是意味着你将能够做到:

toCompare[0].compareTo(toCompare[1]);
Run Code Online (Sandbox Code Playgroud)

成功!

除此之外:演员总是暗示你,程序员知道编译器不知道的东西.所以编译器退后一步,让你这样做 - 假设你知道你在做什么.但是,由于你在问题中显示的代码显然正确,现实会在运行时咬你.是的,可以在编译时确定给定的代码是不正确的.