まず、ジェネリックの概要:
1. 出典: 1.5jdk 新機能が表示されますが、セキュリティ上の問題を解決するために、それはセキュリティ・メカニズムです。
//次のコードは、エラー、動作エラー、プラスに定義された一般的なタイプの所与のセットをコンパイルしません。
2. 利点:;キャストのトラブルを避けるために、実行時の問題を減らすには、コンパイル時に反映しました。
3. キーワード: < データ型 >
パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ ArrayListのArrayListを = 新しいArrayListを()。 arrayList.add( "1" )。 arrayList.add( 1 )。 用(イテレータイテレータ= arrayList.iterator(); iterator.hasNext()){ 文字列の次 = (文字列)iterator.next(); } } }
第二に、一般的な使用方法:
1)ジェネリッククラス:クラスのクラス名<T>
クラスベース<T> { プライベートTのT; パブリックT GETT(){ 戻りT。 } 公共 ボイド敷石(T tの){ この .T = T。 } } パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ ベースの<string> S = 新しいベースの<string> (); s.setT( "S" ); System.out.println(s.getT())。 } }
2)一般的な方法:修飾 <T>戻り型 メソッド名(T T){} 。
クラスデモ{ パブリック <T> ボイドショー(T tの){ のSystem.out.println(T); } } パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ デモデモ = 新しいデモ()。 demo.show( "文字列" ); demo.show( 123 )。 } }
3)静的ジェネリックメソッド:
//一般的な方法は、一般的なクラス定義にアクセスしますが、静的でないメソッドは、静的メソッドのみが独自に定義することができます。
//形式; 修飾子静的<T> 戻り型 メソッド名(T T){} ; <T>静的の上に配置されてはなりません。
4)ジェネリックインターフェイス:インターフェイスの インターフェイス名 <T>
インターフェースインター<T> { ボイドショー(T tの); } クラス InterImplは実装間の<string> { @Override 公共 ボイドショー(文字列S){ System.out.printlnは(S); } } パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ InterImplインター = 新しいInterImpl()。 inter.show( "S" ); } }
第三に、ジェネリックを定義しました。
1、ワイルドカード:?;これは、プレースホルダとして理解することができます。
2、使用法:
1 )? Eのザは延び:上部、受け取ることができるのE 型または E サブタイプ。
2 )? スーパーE :下限は、受け取ることができるのE 型又は Eのスーパータイプと、
第三に、例:
輸入java.utilの。*;
クラスPerson {
プライベート文字列名;
公共人(文字列名){this.name =名;}
パブリック文字列のgetName(){名前を返します;}
}
クラスの学生は、{人を拡張します
公共学生(文字列名){スーパー(名); }
}
パブリッククラスTest {
パブリック静的無効メイン(文字列[] args){
ArrayListの<人> AL1 =新しいのArrayList <人>();
al1.add(新人物( "张三"));
al1.add(新人物( "李四"));
al1.add(新人物( "王五"));
ArrayListの<学生> AL2 =新しいのArrayList <学生>();
al2.add(新学生( "刘一"));
al2.add(新学生( "劉II"));
al2.add(新学生( "刘三"));
printAll(AL1)。
printAll(AL2)。
}
パブリック静的ボイドのprintAll(のArrayList <?人延び> Al)を{
イテレータ<?人>)は、(al.iteratorを=延びています。
一方、(it.hasNext()){
System.out.println(it.next()のgetName()。)。
}}}