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

我试图理解什么<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()方法。


侃侃无极
浏览 126回答 2
2回答

慕田峪7331174

如果调用 compareTo() 比较两个 Association 对象;将使用两个泛型类型 K 或 V 中的哪一个进行比较?正如Association现在实施的那样,两者都不会被使用。相反,您的compareTo方法将始终抛出StackOverflowError,因为它定义不正确。(这意味着决定你的问题的答案是什么是Association类及其定义的责任compareTo。例如,你可能会写public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }. )

30秒到达战场

首先解释一下您当前的定义: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) {&nbsp; &nbsp; return key.compareTo(other.key);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java