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的泛型。有没有解决的办法?
3 回答

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

SMILET
TA贡献1796条经验 获得超4个赞
你正在尝试的演员
(T[])(new Object[tableSize]);
失败,因为数组中的项是Object的实例。对象没有扩展Comparable<String>
,因此强制转换(T [])失败,因为T定义为:
T extends Comparable<String>
要解决此问题:
实例化数组,使其项目是某些确实扩展的类的实例
Comparable<String>
改变
hashTable
从数组(这不是一个通用型),到一个通用的集合类型,例如List<T> hashTable = new ArrayList<T>(tableSize>)
添加回答
举报
0/150
提交
取消