繁体   English   中英

Java,具有比较器或可比较的通用类

[英]Java,generic class class with comparator or comparable

我需要创建一个参数类,其中我有两个构造函数,第一个有一个比较器作为参数,第二个没有任何参数,但只有当参数实现可比较或否则抛出异常时,我才能使用它。

为了更清楚,我需要做这样的事情:

class Storage<T>{
   private Comparator<? super T> comparator = null;
   public Storage() {
       //T sould implement comparable, but how I can check it?
   }
   public Storage(Comparator<? super T> t){
       //T doesn't implement comparable but i can use comparator!
       comparator = t
   }
   public static void main(String[] args) {
       //Just a test
       Comparator<prova> comp = (a, b) -> 1;
       MinMaxStorage<Integer> uno = new MinMaxStorage<>();
       //Should thow an exception
       MinMaxStorage<NotComparable> due = new MinMaxStorage<>();
       //Should be ok       
       MinMaxStorage<NotComparable> due = new MinMaxStorage<>(comp);
   }
}

你不能限制这个无参数构造函数的直接调用:它可以被边界内的任何T调用。 鉴于没有界限,这意味着它可以为无与伦比的T调用。

相反,将无参数构造函数设为私有,并创建一个通用的静态工厂方法:

private Storage() {}

// ...

public <T extends Comparable<? super T>> Storage<T> create() {
  return new Storage<>();
}

然后,这个:

MinMaxStorage<NotComparable> due = MinMaxStorage.create();

不会抛出异常,但更好的是:它不会编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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