ホームページ >Java >&#&チュートリアル >Javaのジェネリックスの例を詳しく解説
1. 定義
ジェネリックとは、型をパラメーター化する機能を指します。ジェネリック型を使用してクラスまたはメソッドを定義すると、コンパイラによってそれが具象型に置き換えられます (ジェネリック インスタンス化)。ジェネリックスを使用する主な利点は、実行時ではなくコンパイル時にエラーを検出できることです。 jdk1.5以降に登場したセキュリティ強化のための機能です。私の理解では、それはむしろ特別な仕様のようなもので、プログラマがそれを呼び出すとき、またはクライアントがそれを導入するとき、彼らは好きなことを自由に行うことができます。 !前の定義では、String 型を入力した場合、ここで従わない場合は、実行を続行させる必要はなく、直接殺されると述べました。
2. 未決定のジェネリックの欠点
1. 警告、ジェネリックのパラメーター化はありません
2. ジェネリックを定義しないと、あらゆる種類のオブジェクトをコレクションにロードできます
3. データをフェッチするときコレクションを削除するには、強制転送を実行する必要があります
import java.util.Iterator;import java.util.Set;import java.util.TreeSet;public class Test {public static void main(String[] args) { Set treeSet = new TreeSet();//没有使用泛型,应该这样:Set<Student> treeSet = new TreeSet<Student>();treeSet.add(new Student(11, 80, "李平")); treeSet.add(new Student(23, 40, "王芳")); treeSet.add(new Student(10, 60, "赵磊")); treeSet.add(new Student(12, 40, "王小二")); treeSet.add(new Student(10, 60, "马苗")); treeSet.add(new Student(18, 60, "马苗")); treeSet.add(new Student(25, 70, "姜浩")); Iterator it = treeSet.iterator();while (it.hasNext()) { Student stu = (Student) it.next();//没有使用泛型:需要强转 System.out.println(stu); } } }
コンパイル時にエラー (黄色) の報告を開始します:
変更後:
注: ジェネリック型である必要があります。リファレンスタイプ! ! !
注: ジェネリック型は参照型である必要があります。 ! !
注: ジェネリック型は参照型である必要があります。 ! !
3.一般的な定式化JDK次の3つの状況がよく見られます:
1.treeset(collection&lt;?extends e&gt; c) E> コンパレータ)
3.TreeSet(SortedSet? はジェネリックを指します。
(ご覧のとおり、3 はジェネリックの通常の定義です)以下の注:ジェネリックの上限: extends E > // タイプ E または E のサブタイプを受け取ることを示します下限: super E > // タイプ E、または E の親タイプを受け取ることを示します
コード例:
//这时这个函数只能接收 Number及其子类static void show(Point<? extends Number> p){ System.out.println(p.getX()); System.out.println(p.getY()); } public static void main(String[] args) {/* 对于上面的声明,下面的操作是可以的 Point<Integer> p1=new Point<Integer>(); p1.setX(new Integer(90)); p1.setY(new Integer(50)); show(p1); *///下面的操作将出错Point<String> p1=new Point<String>(); p1.setX("90ok"); p1.setY("50ok"); show(p1); //出错
(インターネットからの画像)
IV. ジェネリックスのアプリケーションを理解する
ジェネリック クラス、ジェネリック メソッド、ジェネリック インターフェイスをカスタマイズできます。学習するときは、その原理を知る必要があります。将来、JDK で喜んで呼び出すことができます~~1. カスタム ジェネリック クラス
show(Point<? String> <String> p1= Point<String>"90ok""50ok"
2. ジェネリック メソッド
3. 汎用インターフェイス
5. 汎用制限
1. インスタンスの作成に汎用パラメータを使用することはできません。つまり、新しい E() を使用することはできません2。
3. 静的環境ではクラスのパラメーターをジェネリック型にすることはできません (注)ジェネリック クラスのすべてのインスタンスは同じランタイム クラスを持つため、ジェネリック クラスの静的変数とメソッドは次のように制御されます。すべてのインスタンスで共有されます。共有されるため、同じジェネリック型を再定義する必要がなく、同じジェネリック型を定義せずに共有 (または一貫性) を実現できない場合は、この状況を放置する必要はありません。したがって、静的環境でクラス パラメーターをジェネリックに設定することは違法です。 りー
以上がJavaのジェネリックスの例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。