如何使关联对象仅由一个泛型参数类型进行比较

How to make an object of association comparable by only one generic parameter type

我正在尝试理解 <K, V extends Comparable<? super V>> 的实际含义。

如果调用compareTo()比较两个Association<K,V>对象; KV 两种通用类型中的哪一种将用于进行比较?

如果使用 <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 个类型参数:KV。其中,V 有额外的限制,它必须与 ? super V 相当(= VV 的超类型)。

既然要按键比较,应该是KComparable。此外,您想比较 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);
}