型パラメーターと型引数には違いがあります。ワイルドカード (superおよびextends) の使用は、型引数用です。つまり、型パラメーターの対応する値を実際に定義するときに、呼び出しサイトでそれらを宣言します。または、キーワードextendsを型パラメーターの制約に使用できます。
型パラメーターと型引数
そのため、定義class List<T>{}でTは、 は型パラメーターと呼ばれます。type の参照を宣言する場合List、呼び出しサイトで の型引数を指定Tできます。これは、不変条件 (つまりList<String> jedis) または super または extends を使用したワイルドカード (つまりList<? extends Number> myNums, List<? super String> names) にすることができます。
型パラメータの制約
キーワードextendsは、特定の型パラメーターの制約を宣言するために、まったく異なる目的で使用することもできます。たとえば、宣言は次のとおりです。
class List<T extends CharSequence>{}
型パラメーターTは制約されています。これは、型パラメーターの型引数を宣言するときはいつでも、型またはそのサブタイプのいずれかTでなければならないことを意味します。CharSequence
それ自体List<String>は有効な宣言ですが、そうでList<Integer>はありません。
キーワードの使用は、super型パラメーター制約の宣言では許可されていません。おそらく、宣言ではあまり意味がないためです。それ自体Tではないための有効な型引数は何でしょうか?A