java – 泛型和compareTo()方法

前端之家收集整理的这篇文章主要介绍了java – 泛型和compareTo()方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个SkipList,我有一个采用通用数据类型的方法
  1. public void add(E key,Integer value)
  2. {
  3. Node<E> p;
  4. p = find(key);
  5. }

带你到这里:

  1. public Node<E> find(E key)
  2. {
  3. //Start at head
  4. Node<E> p = head;
  5.  
  6. while (true)
  7. {
  8. while ( (p.getRight().getKey() != Node.posInf) && (p.getRight().getKey().compareTo(key) <= 0 ))
  9. {
  10. p.setRight(p.getRight());
  11. }
  12.  
  13. //More stuff down here
  14. }
  15. }

问题出在compareTo()方法上.它说类型E的compareTo()方法是未定义的.在Eclipse中它要我添加两个这样的类型转换:

((String)p.getRight().getKey().compareTo((String)key)< = 0) 为什么要String?数据类型可以是任何东西.我尝试做E的类型转换,但是Eclipse想要将它改回String.任何帮助,将不胜感激.

解决方法

您尚未显示E是如何定义的,但错误消息表明您没有放置Comparable< E>的上限.关于E的声明

你可以在课堂上用这样的东西来完成它:

  1. public class SkipList<E extends Comparable<E>>

这将允许您在类型E的键变量上调用compareTo.

至于为什么Eclipse建议转换为String,看起来Eclipse正在猜测要使其编译的最佳改变是什么.它可能已经猜到了String,因为它是Comparable< String>.在这种情况下,它是错误的,因为E不一定是String.这里的解决方案是不同的,如上所述:将E限制为可比较的< E>.

猜你在找的Java相关文章