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

高洛峰
リリース: 2016-12-19 15:43:11
オリジナル
2266 人が閲覧しました

元々含まれていた型: ジェネリックの導入後は、List、List の 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の中国語サイトです!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート