ジェネリックのチュートリアル 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;
}
}