ホームページ  >  記事  >  Java  >  JavaジェネリックにおけるTと疑問符(ワイルドカード)の違い

JavaジェネリックにおけるTと疑問符(ワイルドカード)の違い

高洛峰
高洛峰オリジナル
2016-12-19 15:43:112242ブラウズ

元々含まれていた型: ジェネリックの導入後は、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 は T

2 を継承します。修飾子 (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の中国語サイトです!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。