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可能であればそれを行うクラスの例です。)

一方、できることの 1 つは、パブリック コンストラクターの代わりに静的ファクトリ メソッドを使用することです。たとえば、次のように記述できます。

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) {
    ...
  }
}

これにより、さまざまなファクトリ メソッドにさまざまな型の制約を設定できます。たとえばComparableComparator.

于 2013-09-25T21:20:40.423 に答える