java - 泛型和 compareTo() 方法

标签 java eclipse generics compare skip-lists

我正在尝试创建一个 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()上方法。它说 compareTo() E 类型未定义方法.在 Eclipse 中,它希望我像这样添加两个类型转换:

((String) p.getRight().getKey().compareTo((String) key) <= 0 )

为什么要 String ?数据类型可以是任何东西。我尝试对 E 进行类型转换相反,但 Eclipse 想将其改回 String .任何帮助将不胜感激。

最佳答案

你还没有展示如何E已定义,但错误消息表明您没有设置 Comparable<E> 的上限关于E的声明.

你可以在类里面用这样的东西来完成:

public class SkipList<E extends Comparable<E>>

这样您就可以调用 compareTo在你的 key E 类型的变量.

至于为什么 Eclipse 建议转换为 String ,看起来 Eclipse 正在猜测要使其编译的最佳更改是什么。它可能猜到了String因为它是Comparable<String> .在这种情况下,这是错误的,因为 E不一定是 String .这里的解决方案是不同的,正如我上面所说:restrict E成为Comparable<E> .

关于java - 泛型和 compareTo() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31275871/

相关文章:

java - Android - 如何使用 ActionBar 在 Fragment 之间导航

使用 cxf JSONProvider 将 Java 转为 JSON

java - android:inputType ="textUri"不会启用互联网键盘(w .com 按钮)

相当于 typeof(SomeClass) 的 Java

java - Android - 缩放到用户位置并显示 map

java - 如何用字符更改按钮文本?

java - 为 TextView 赋值时出现 NullPointer 异常

java - 在运行过程中从 Java 项目中提取文件

c# - 看到 "cannot convert expression to type while using a generic method"时我做错了什么?

scala - 如何在 Scala 中设置多个 ORed 类型边界