如何使关联对象仅由一个泛型参数类型进行比较
How to make an object of association comparable by only one generic parameter type
我正在尝试理解 <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()
方法。
If compareTo() is called to compare two Association objects; which of the two generic types K or V will be used to make the comparison?
由于 Association
是现在实施的,所以两者都不会被使用。相反,您的 compareTo
方法将始终抛出 WhosebugError
,因为它的定义不正确。
(这意味着 Association
class 及其对 compareTo
的定义有责任决定你的问题的答案是什么。例如,你可以写public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }
.)
先解释一下你现在的定义:
public class Association<K, V extends Comparable<? super V>>
这意味着您正在定义一个名为 Association
的 public class 这个 class 有 2 个类型参数:K
和 V
。其中,V
有额外的限制,它必须与 ? super V
相当(= V
或 V
的超类型)。
既然要按键比较,应该是K
即Comparable
。此外,您想比较 Association
本身,因此它也必须是 Comparable
.
因此将您的 class 定义更改为以下内容:
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);
}
我正在尝试理解 <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()
方法。
If compareTo() is called to compare two Association objects; which of the two generic types K or V will be used to make the comparison?
由于 Association
是现在实施的,所以两者都不会被使用。相反,您的 compareTo
方法将始终抛出 WhosebugError
,因为它的定义不正确。
(这意味着 Association
class 及其对 compareTo
的定义有责任决定你的问题的答案是什么。例如,你可以写public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }
.)
先解释一下你现在的定义:
public class Association<K, V extends Comparable<? super V>>
这意味着您正在定义一个名为 Association
的 public class 这个 class 有 2 个类型参数:K
和 V
。其中,V
有额外的限制,它必须与 ? super V
相当(= V
或 V
的超类型)。
既然要按键比较,应该是K
即Comparable
。此外,您想比较 Association
本身,因此它也必须是 Comparable
.
因此将您的 class 定义更改为以下内容:
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);
}