Java中的通用数组

Java中的通用数组

好吧,我一直在谷歌上网,我似乎无法找到任何问题的解决方案。我找到了很多解决方案,而不是任何合适的解决方案。

我需要创建一个泛型数组。但泛型类型本身扩展了Comparable。当我尝试以下内容时:

public class Hash<T extends Comparable<String>> {
    private T[] hashTable;
    private int tableSize;

    Hash(int records, double load) {
        tableSize = (int)(records / loadFactor);
        tableSize = findNextPrime(tableSize);
        hashTable = (T[])(new Object[tableSize]);  //Error: Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
    }}

问题是Object不能被强制转换为扩展Comparable的泛型。有没有解决的办法?


慕妹3242003
浏览 502回答 3
3回答

繁星点点滴滴

这里的其他答案通常都提倡更好的方法(特别是建议使用ArrayList),但在这个特定情况下的一个简单答案可能是:hashTable&nbsp;=&nbsp;(T[])(new&nbsp;Comparable[tableSize]);(即创建一个类型为raw Comparable而不是Object的数组)如果你在Hash对象中正确封装了对这个数组的所有访问权限,这应该有效,但是(正如其他答案所解释的那样)你可能会让自己变得脆弱。

SMILET

你正在尝试的演员(T[])(new&nbsp;Object[tableSize]);失败,因为数组中的项是Object的实例。对象没有扩展Comparable<String>,因此强制转换(T [])失败,因为T定义为:T&nbsp;extends&nbsp;Comparable<String>要解决此问题:实例化数组,使其项目是某些确实扩展的类的实例&nbsp;Comparable<String>改变hashTable从数组(这不是一个通用型),到一个通用的集合类型,例如List<T> hashTable = new ArrayList<T>(tableSize>)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java