繁体   English   中英

Java - 为什么将数组声明为接口类型?

[英]Java - Why declare an array as a type of Interface?

这是 Mark Weiss 教授在他的著作Data Structures and Algorithm Analysis in 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 的数组,因为我们必须将Comparable[]转换为AnyType[] 有什么设计哲学吗?

设计“哲学”是你不能实例化一个类型参数的数组,所以你必须用一个合法的类型实例化这个数组。 该方法已知的唯一可用的合法类型是ObjectComparable数组,后者捕获有关该类型的更多知识。

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

这是必然性的“哲学”。

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

如果您查看这个“如何创建泛型数组”的问题,有人会提供初始化对象数组,然后将类型转换为所需泛型数组的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM