ジェネリックのチュートリアル Q&A から演習問題を解こうとしていたところ、私の答えは少し違っていました
私の答え
public static <T extends Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) //Option1
public static <T extends Comparable<T>>
T max(List<? extends T> list, int begin, int end) //Option2
以下の引用された回答から
だから私の質問は
T extends Object & Comparable<? super T>オプション 1 :を に置き換えても違いはありますかT extends Comparable<? super T>。extends Object暗黙的ではありませんか?Comparable<? super T>オプション 2 :を に置き換えても違いはありComparable<T>ますか? もしそうならどのように?List<? extends Comparable<? super Comparable<? super T>>> list;Eclipse コード補完は、Ctrl+1max(list, 1, 10);でビット長のローカル変数を作成します。Comparable<? super T>を拡張し、リストを作成してインスタンスをリストに追加し、以下のメソッドを呼び出すクラス (階層) を定義する方法は?max()基本的に、クラスインスタンスA or Bをリストに追加した後に呼び出す方法を知りたいclass B extends A
リストの [begin, end) の範囲で最大の要素を見つけるジェネリック メソッドを作成します。
答え:
import java.util.*;
public final class Algorithm {
public static <T extends Object & Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) {
T maxElem = list.get(begin);
for (++begin; begin < end; ++begin)
if (maxElem.compareTo(list.get(begin)) < 0)
maxElem = list.get(begin);
return maxElem;
}
}