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

时间:2017-04-14 16:56:00

标签: 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 ];        
    }
}

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

2 个答案:

答案 0 :(得分:4)

设计&#34;哲学&#34;是你不能实例化一个类型参数的数组,所以你必须使用合法的类型实例化数组。该方法已知的唯一可用法律类型是ComparableHtmlCompressor的数组,后者捕获有关该类型的更多知识。

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

这是&#34;哲学&#34;必要性。

答案 1 :(得分:0)

AnyType我相信是通用的。在Java中,您无法创建泛型数组。作为解决方法,他实例化了一个Comparables数组(一个接口),然后将其类型转换为一个泛型数组。

如果您查看“如何创建泛型数组” question,则有人会初始化一组对象,然后将其类型转换为所需泛型的数组。