java - 在 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 数据?
解决方案
您不能在对象上使用“<”或“>”。我认为你需要的是:
public int compareTo(T somePayLoad) {
return this.data.compareTo(somePayLoad.data);
}
(添加空检查)。
推荐阅读
- javascript - 如果 Web 应用的 CacheStorage 缓存内容过多,应用会崩溃吗?
- elasticsearch - 别名上的 ElasticSearch 在 5 天后无法正常工作
- python-3.x - 如何使用python list将5个连续的1减少为一个
- powerbi - 如何获取 Power BI Desktop 度量中空白的默认字符串值
- javascript - 光照贴图只适用于静态场景吗?
- ios - 如何在闭包中使用 self 来防止内存泄漏
- python-3.x - 我试图将自定义函数拟合到一些 1-D 直方图数据,但我得到 - TypeError:只有 size-1 数组可以转换为 Python 标量
- ruby - 参数数量错误(给定 1,预期 2)(ArgumentError)
- node.js - Node JS Octokit 认证和存储 Github Token
- amazon-web-services - Maven 在多模块项目中看不到一些外部依赖项