Java - 为什么将数组声明为一种接口?

liu*_*uxl 7 java arrays

这是来自Mark Weiss教授的Java数据结构和算法分析一书

public class BinaryHeap<AnyType extends Comparable<? super AnyType>>{
    private void enlargeArray( int newSize ){
        AnyType [] old = array;
        array = (AnyType []) new Comparable[ newSize ];
        for( int i = 0; i < old.length; i++ )
        array[ i ] = old[ i ];        
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我们声明一个具有类型的接口Comparable的数组,因为我们必须转换Comparable[]AnyType[]?那里有任何设计理念吗?

Lew*_*och 4

设计“哲学”是,你无法实例化类型参数的数组,因此你必须使用合法的类型实例化数组。该方法已知的唯一可用的合法类型是 array ofObject或 of Comparable,后者捕获有关该类型的更多知识。

您可以向下转换为类型参数的数组,并且返回类型必须是该类型,因此需要向下转换。

这是必然性的“哲学”。