为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的通用数组

Java中的通用数组

慕妹3242003 2019-08-09 09:52:00
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对象中正确封装了对这个数组的所有访问权限,这应该有效,但是(正如其他答案所解释的那样)你可能会让自己变得脆弱。


查看完整回答
反对 回复 2019-08-09
?
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>)


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号