[英]How to make an object of association comparable by only one generic parameter type
我试图了解什么<K, V extends Comparable<? super V>>
<K, V extends Comparable<? super V>>
实际上是指。
如果调用compareTo()
来比较两个Association<K,V>
对象; 将使用两种通用类型K
或V
的哪一个进行比较?
<K, V extends Comparable<? super K>>
会发生什么<K, V extends Comparable<? super K>>
<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()
方法。
如果调用compareTo()来比较两个Association对象; 将使用两种通用类型K或V中的哪一个进行比较?
由于Association
目前已实施,因此将不再使用。 相反,您的compareTo
方法将始终抛出StackOverflowError
,因为定义不正确。
(这暗示着Association
类的责任及其compareTo
定义来决定问题的答案是什么。例如,您可以编写public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }
。
首先解释一下您当前的定义:
public class Association<K, V extends Comparable<? super V>>
这意味着您正在定义一个称为Association
的公共类。该类有2个类型参数: K
和V
其中, V
还有一个限制,那就是它必须与? super V
相当? super V
? super V
(= V
或超型的V
)。
由于您希望通过键进行比较,因此应该是K
是Comparable
。 另外,您想比较Association
本身,因此它也必须是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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.