Java,generic class class with comparator or comparable
Java,generic class class with comparator or comparable
我需要创建一个参数class,其中我有两个构造函数,第一个有一个比较器作为参数,第二个没有任何参数,但只有当参数实现可比较或否则抛出异常。
为了更清楚,我需要做这样的事情:
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();
不会抛出异常,但更好的是:它不会编译。
我需要创建一个参数class,其中我有两个构造函数,第一个有一个比较器作为参数,第二个没有任何参数,但只有当参数实现可比较或否则抛出异常。
为了更清楚,我需要做这样的事情:
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();
不会抛出异常,但更好的是:它不会编译。