2012-07-03 9 views
8

私は以下のコードを持っていますが、私はすべてのジェネリックスと混同しています。静的とは何ですか<T>リスト<T> methodName(リスト<? super T>入力)

public static <T> List<T> backwards (List<? super T> input) { 
     List<T> output = new ArrayList<T>(); 
     return output; 
} 

私の理解では、私はArrayListのListインタフェースを実装し、ArrayListのを返すを作成backwardsという名前のパブリックメソッドを持っているということです。

<T> 

「私は、任意のタイプを宣言している:私の質問は、あなたがコンパイラに言っている......次の部分で、私は、コンパイラに言って、実際にどのような

static <T> List<T> backwards (List<? super T> input) 
+2

その*種類*は 'T'(例えば、入力は 'リスト'することができる)、および戻りのスーパータイプである 'backwards'は、いくつかのタイプ* *のリストを取り込み'T'のリスト – Mehrdad

+0

これを説明してくれてありがとうMehrdad。 – user1459497

+0

'input'は' backwards'で使用されますか?私はそれがどこで使われるのか分からなかった。 – Crazenezz

答えて

31

ですTこのメソッドは、メソッドの呼び出しごとに(プリミティブではない)何でもかまいません。

List<T> 

「この方法は、そのタイプTList含む要素を返します。」

List<? super T> input 

「タイプT、又はT任意のスーパータイプの要素を含むListあるinputと呼ばれるパラメータを取るであろう。例えば、TIntegerある場合、この方法は、inputList<Integer>List<Number>かもしれません、またはList<Object> "

+0

ポールありがとうございます。あなたの説明は非常に明確で詳細です。 – user1459497

+5

これはメソッドシグネチャ 'public static List 'が 'public static List 'と比較して意味するものには対応していません。 – 2rs2ts

+2

@agarrett 'public static List 'は型パラメータを宣言していないので、既に宣言クラスのジェネリック型パラメータ 'T'のスコープに入っている必要があります。しかし、質問には言及されていないので、私はあなたがそれを持ってきた理由を得ることはありません。 –

関連する問題