ホームページ >Java >&#&チュートリアル >Javaのジェネリックスの例を詳しく解説

Javaのジェネリックスの例を詳しく解説

零下一度
零下一度オリジナル
2017-06-30 10:10:591283ブラウズ

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 s)

その中で、

? はジェネリックを指します。

(ご覧のとおり、3 はジェネリックの通常の定義です)

以下の注:

ジェネリックの上限: // タイプ E または 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 サイトの他の関連記事を参照してください。

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