繁体   English   中英

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

[英]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>对象; 将使用两种通用类型KV的哪一个进行比较?

<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个类型参数: KV 其中, V还有一个限制,那就是它必须与? super V相当? super V ? super V (= V或超型的V )。

由于您希望通过键进行比较,因此应该是KComparable 另外,您想比较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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM