假设我有一个java类
public class Foo<ELEMENT, COMPARATOR extends Comparator<ELEMENT>> {
public Foo(ELEMENT e, COMPARATOR c) {...}
}
如何重新加载类型参数<ELEMENT>
,以便我也可以使用
public class Foo<ELEMENT extends Comparable> {
public Foo(ELEMENT e) {
this(e, new Comparator<ELEMENT>() {
public int compare(ELEMENT e1, ELEMENT e2) {
return e1.compareTo(e2);
}
})
}
}
答案 0 :(得分:3)
TreeSet
是一个可以执行此操作的类的示例。)
另一方面,您可以做的一件事是使用静态工厂方法而不是公共构造函数。例如,您可以写
public class Foo<E> {
public static <E> Foo<E> withComparator(E e, Comparator<? super E> comparator){
...
}
public static <E extends Comparable> Foo<E> withoutComparator(E e) {
...
}
}
这允许您对不同的工厂方法设置不同的类型约束,例如:在不带Comparable
的重载上添加Comparator
约束。