微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Type参数为通用类实现Comparable接口

如何解决使用Type参数为通用类实现Comparable接口

public class ClassX<T> implements Comparable<ClassX<T>> {

   private T o;

   public ClassX(T o) {
       this.o = o;
   }

   public T getobject() {
       return o;
   }

   public void setobject(T o) {
       this.o = o;
   }

   @Override
   public int compareto(ClassX<T> arg0) {
       return o.compareto(arg0.o);
   }
}

如果我有一个类似的类,并且想实现Comparable接口,我将不得不将ClassX<T>更改为ClassX<T extends Comparable<T>>。但是,如果我还想将ClassX用于那些没有实现Comparable接口的对象,又知道我将无法对这些对象使用compareto()方法,该怎么办?

解决方法

另一个选择是,有一个静态方法返回一个Comparable,而不是实现Comparator,并且仅当满足T的约束时才能调用此方法。因此,您的ClassX可以与未实现T的{​​{1}}一起使用,但是对于Comparable,{{1} }确实实现了Comparator

ClassX
,

如何创建另一层层次结构来支持这一点:

public class NonComparableClassX<T> implements Comparable<NonComparableClassX<T>> {
 // ....

  @Override
   public int compareTo(ClassX<T> arg0) {
     // throw Exception;
   }
}

public class ClassX<T> extends NonComparableClassX<T> {
 // ....

  @Override
   public int compareTo(ClassX<T> arg0) {
     // Implement comparables here
   }
}

这样,您可以将所有对象封装为ClassX,如果需要的话,也可以是NonComparableClassX类型

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。