2 回答
TA贡献1828条经验 获得超13个赞
如果调用 compareTo() 比较两个 Association 对象;将使用两个泛型类型 K 或 V 中的哪一个进行比较?
正如Association
现在实施的那样,两者都不会被使用。相反,您的compareTo
方法将始终抛出StackOverflowError
,因为它定义不正确。
(这意味着决定你的问题的答案是什么是Association
类及其定义的责任compareTo
。例如,你可能会写public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }
. )
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);
}
添加回答
举报