1

minset の最小要素を返すことを意図した静的ユーティリティの汎用メソッドを考えてみましょう。なぜそれを次のように宣言する必要があるのですか

 public static <T extends Comparable<? super T>> T min(Set<? extends T> producerSet)

代わりに次のように宣言すると、何が問題になりますか

public static <T extends Comparable<T>> T min(Set<? extends T> producerSet)

ここで私に与える型パラメータのワイルドカード型はどのような柔軟性がありますか?

4

1 に答える 1

0

これは、T が Comparable の実装者のサブクラスである場合をカバーします。次の点を考慮してください。

public static class A implements Comparable<A> {

   public int compareTo(A o) {
      return 0;
   }
}
public static class B extends A {}

public static <T extends Comparable<T>> T min(Set<? extends T> producerSet) {
   return null;
}

public static void main(String[] args) {
   Set<B> set = new HashSet<B>();
   min(set); // incompatible with method signature
}
于 2013-03-10T02:11:15.913 に答える