首页 > 解决方案 > 在 compareTo() 中比较两个泛型

问题描述

我有以下类签名:

public class SkipListSet<T extends Comparable<T>> implements SortedSet<T>

和 SkipListSet 类之外的另一个类:

class Node<T extends Comparable<T>>

第二个充当包装类,包含以下内容:

        T data;
        List<Node<T>> tower;
        Node<T> nextNode = null;
        Node<T> prevNode = null;

当我尝试在我的 Node 类中实现 compareTo() 方法时:

        public int compareTo(T somePayLoad) {
            if (this.data < somePayLoad)
                return -1;
            else if (this.data > somePayLoad)
                return 1;
            else
                return 0;
        }

我收到以下错误:

SkipListSet.java:171: error: bad operand types for binary operator '<'
                        if (this.data < somePayLoad)
                                      ^
  first type:  T
  second type: T
  where T is a type-variable:
    T extends Comparable<T> declared in class SkipListSet.Node

为什么我的 compareTo 方法无法比较两种类型的 T 数据?

标签: javagenericscomparablecompareto

解决方案


您不能在对象上使用“<”或“>”。我认为你需要的是:

public int compareTo(T somePayLoad) {

    return this.data.compareTo(somePayLoad.data);
}

(添加空检查)。


推荐阅读