为了账号安全,请及时绑定邮箱和手机立即绑定

如何使关联对象仅通过一种泛型参数类型进行比较

如何使关联对象仅通过一种泛型参数类型进行比较

侃侃无极 2021-10-27 17:15:03
我试图理解什么<K, V extends Comparable<? super V>>是真正的意思。如果compareTo()被调用来比较两个Association<K,V>对象;两种通用类型中的哪一种K或V将用于进行比较?<K, V extends Comparable<? super K>>改为使用时会发生什么?public class Association<K, V extends Comparable<? super V>>{      K key;      V value;      //---------------------------------------          public int compareTo(Association<K, V> object)       {            return this.key.compareTo(object.key);      }}编辑了compareTo()方法。
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

如果调用 compareTo() 比较两个 Association 对象;将使用两个泛型类型 K 或 V 中的哪一个进行比较?

正如Association现在实施的那样,两者都不会被使用。相反,您的compareTo方法将始终抛出StackOverflowError,因为它定义不正确。

(这意味着决定你的问题的答案是什么是Association类及其定义的责任compareTo。例如,你可能会写public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }. )


查看完整回答
反对 回复 2021-10-27
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

首先解释一下您当前的定义:


public class Association<K, V extends Comparable<? super V>>

这意味着您正在定义一个名为Association此类的公共类,该类具有 2 个类型参数:K和V. 其中,V具有额外的限制,即它必须与? super V(=V或 的超类型V) 相比较。


既然你想通过关键来比较,那么应该K是Comparable。此外,您想比较Associations 本身,所以它也必须是Comparable.


因此,将您的类定义更改为以下内容:


public class Association<K extends Comparable<K>, V> implements Comparable<Association<K, V>>

你的 compareTo 将是:


public int compareTo(Association<K, V> other) {

    return key.compareTo(other.key);

}


查看完整回答
反对 回复 2021-10-27
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信