0

假设我有一个 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);
           }
       })
    }
}
4

1 回答 1

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.

于 2013-09-25T21:20:40.423 回答