java – 泛型和compareTo()方法
发布时间:2020-12-14 16:37:36 所属栏目:Java 来源:网络整理
导读:我正在尝试创建一个SkipList,我有一个采用通用数据类型的方法: public void add(E key,Integer value){ NodeE p; p = find(key);} 带你到这里: public NodeE find(E key){ //Start at head NodeE p = head; while (true) { while ( (p.getRight().getKey()
我正在尝试创建一个SkipList,我有一个采用通用数据类型的方法:
public void add(E key,Integer value) { Node<E> p; p = find(key); } 带你到这里: public Node<E> find(E key) { //Start at head Node<E> p = head; while (true) { while ( (p.getRight().getKey() != Node.posInf) && (p.getRight().getKey().compareTo(key) <= 0 )) { p.setRight(p.getRight()); } //More stuff down here } } 问题出在compareTo()方法上.它说类型E的compareTo()方法是未定义的.在Eclipse中它要我添加两个这样的类型转换: ((String)p.getRight().getKey().compareTo((String)key)< = 0) 为什么要String?数据类型可以是任何东西.我尝试做E的类型转换,但是Eclipse想要将它改回String.任何帮助,将不胜感激. 解决方法
您尚未显示E是如何定义的,但错误消息表明您没有放置Comparable< E>的上限.关于E的声明
你可以在课堂上用这样的东西来完成它: public class SkipList<E extends Comparable<E>> 这将允许您在类型E的键变量上调用compareTo. 至于为什么Eclipse建议转换为String,看起来Eclipse正在猜测要使其编译的最佳改变是什么.它可能已经猜到了String,因为它是Comparable< String>.在这种情况下,它是错误的,因为E不一定是String.这里的解决方案是不同的,如上所述:将E限制为可比较的< E>. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读