5.23元のタイプの代わりに汎用を使用する

1914 ワード

JDK 5は汎用型を導入し,新しいコードでは元のタイプ(raw type)の代わりに汎用型を優先的に使用すべきである.
 
汎用関連用語:
List
generic type
汎用型
E
formal type parameter
形式パラメータ
List
parameterized type
パラメトリックタイプ
String
actual type parameter
じつパラメータ
List
raw type
元のタイプ
List
unbounded wildcard type
 

bounded type parameter
 

bounded type parameter
 
>
recursive type bound
 

bounded wildcard type
 
List asList(E[] a)
generic method
 
String.class
type token
 
 
汎用は、コンパイル時にデータ型をチェックしたり、データ型を自動的に変換したりするために使用されます.実行時には、汎用型は実際のタイプに置き換えられます.すなわち、実行時には、List.classのみが存在し、List.classのようなタイプは存在しません.これをタイプ消去と呼びます
注意1:コンパイラはtype inferenceを使用して汎用の実際のパラメータタイプを決定します.
注2:反射によりListのような「宣言」を取得できますが、List.classタイプのオブジェクトは取得できません
 
タイプを制限しない場合は、元のタイプのリストの代わりにListを使用することを推奨します.
 
Listリスト内の要素タイプが不明で、このタイプのリストに要素を追加することはできません.以下のコードコンパイルは通過しません.
List<?> list=new ArrayList<String>();
list.add("bingo");//    

 
Listは、リストにHelloまたはそのサブクラスタイプを含む要素を表し、リストは、リストにHelloまたはその親タイプの要素が含まれていることを示します.extends、superは汎用パラメータ範囲を限定するために使用される
 
汎用を使用すると、クラスまたはメソッドの宣言を減らすことができます.次の2つのメソッドでは、1つの汎用メソッドで置き換えることができます.
	public int getValue(int value){
		return value;
	}
	
	public String getValue(String value){
		return value;
	}
	
	//    ,       
	public <T> T getValue(T value){
		return value;
	}