元々含まれていた型: ジェネリックの導入後は、Lista87fdacec66f0909fc0757c19f2d2b1d、Listf7e83be87db5cd2d9a8a0b8117b38cd4 の 2 つの異なる型になりました。
ジェネリックの利点は次のとおりです: バージョンを開始public void write(Integer i, Integer[] ia); public void write(Double d, Double[] da);ジェネリック バージョン
public <T> void write(T t, T[] ta);簡略化されたコードジェネリックを定義します1. クラスの後に定義しますクラス名に従います
public class TestClassDefine<T, S extends T>{}ジェネリックT、S、およびを定義しますS は T2 を継承します。修飾子 (public)
public <T, S extends T> T testGenericMethodDefine(T t, S s){}がジェネリック T、S を定義した直後のメソッド デコレーター の後に定義され、S は T をインスタンス化し、ジェネリック定義された 1 をインスタンス化します。最初にクラス変数を宣言するとき、またはクラス変数をインスタンス化するときに、クラス に対して。たとえば、2 番目に継承されたクラスまたはインターフェイスを実装する場合は
List<String> list; list = new ArrayList<String>;です。例:
public class MyList<E> extends ArrayList<E> implements List<E> {...}2. インスタンス化定義メソッドのジェネリックジェネリックメソッドを呼び出すとき、コンパイラは自動的に型パラメータ(ジェネリック)に値を代入します。代入が成功しない場合はコンパイルエラーになります。報告されました
ワイルドカード (?) 上記のジェネリックスの定義と割り当てがあります。値を割り当てるとき、上記のセクションでは、割り当てられた値がすべて特定の型であると述べましたが、割り当てられた型が不明な場合はワイルドカード (?) を使用します。代わりに今:
List<?> unknownList; List<? extends Number> unknownNumberList; List<? super Integer> unknownBaseLineIntgerList;など Java コレクション フレームワークでは、パラメーター値が不明な型のコンテナ クラスの場合、要素を読み取ることのみができ、要素を追加することはできません。その型が不明なため、コンパイラーは要素を追加できません。要素の型とコンテナの型に互換性があるかどうか、唯一の例外は NULL です
Java ジェネリックにおける T と疑問符 (ワイルドカード) の違いに関する詳細な関連記事については、注意してください。 PHPの中国語サイトです!