Javaジェネリックとは何ですか

angryTom
リリース: 2019-11-11 11:40:20
オリジナル
3523 人が閲覧しました

Javaジェネリックとは何ですか

Java ジェネリックとは

ジェネリック、つまり「パラメータ化された型」です。パラメータに関して言えば、最もよく知られているのは、メソッドを定義するときに仮パラメータがあり、メソッドが呼び出されるときに実際のパラメータが渡されることです。では、パラメーター化された型をどのように理解すればよいでしょうか?名前のとおり、 はメソッドの変数パラメータと同様に、元の特定の型から型をパラメータ化するための です。このとき、型もパラメータ形式で定義されます (呼び出し可能)型パラメータ)を使用し、使用時または呼び出し時に特定の型(型引数) を渡します。

ジェネリックスの本質は、型をパラメータ化することです (仮パラメータに対する特定の制限の型は、新しい型を作成せずに、ジェネリックスで指定されたさまざまな型を通じて制御できます)。つまり、ジェネリックの使用中に、操作のデータ型がパラメータとして指定されます。このパラメータの型はクラス、インターフェイス、メソッドで使用でき、それぞれジェネリック クラス、ジェネリック インターフェイス、ジェネリック メソッドと呼ばれます。 。 (推奨チュートリアル: #java チュートリアル #)

ジェネリックの役割:

コンパイラは、コンテナに追加した要素が汎用コンテナ定義の期待を満たしているかどうかをチェックします。必要なのは、このコンテナがどのタイプのコンテナであるかをコンパイラに伝えることだけです。コンパイラは、コンテナから取得した要素を自動的にキャストします。

ジェネリックの介入後、プログラマの焦点は 2 点から 1 点に変わりました。

コンテナへの投入の検査とコンテナの変換が行われるように、コンテナ処理のタイプを定義します。コンテナの取り出しはすべてコンパイラによって行われます。

利点:

1. 型安全性

ジェネリックスの主な目的は、Java プログラムの型安全性を向上させることです。ジェネリックスを使用して定義された変数の型制限を知ることで、コンパイラーは型の仮定を非常に高いレベルで検証できます。ジェネリックがなければ、これらの仮定はシステム開発者の頭の中にしか存在しません。

ジェネリックを使用すると、変数宣言でこの追加の型情報をキャプチャすることで、コンパイラーがこれらの追加の型制約を強制できるようになります。型エラーは、実行時に ClassCastException として表示されるのではなく、コンパイル時に捕捉されるようになりました。型チェックを実行時からコンパイル時に移行すると、Java 開発者はエラーをより早期かつ簡単に発見できるようになり、プログラムの信頼性が向上します。

2. キャストの削除

ジェネリックの副次的な利点は、ソース コード内の多くのキャストが削除されることです。これにより、コードが読みやすくなり、エラーの可能性が減ります。キャストを減らすとジェネリック クラスを使用するコードを改善できますが、ジェネリック変数を宣言する場合には、対応するペナルティが発生します。単純なプログラムでジェネリック変数を 1 回使用しても、コードの人気が低下することはありません。ただし、汎用変数を複数回使用する大規模なプログラムの場合、いいねのレベルは累積的に低下する可能性があります。したがって、ジェネリックによって強制的な型変換が排除されると、コードはより明確でクリーンになります。

3. 操作効率の向上

非ジェネリック プログラミングでは、単一の型をオブジェクトとして渡すと、ボックス化およびボックス化解除の操作が発生し、両方のプロセスで大きなオーバーヘッドが発生します。ジェネリックの導入後は、Boxing や Unboxing 操作が不要となるため、比較的運用効率が高く、特に収集操作が頻繁に行われるシステムでは、この機能によるパフォーマンスの向上がより顕著になります。

4. パフォーマンス向上の可能性

ジェネリックは、より大きな最適化の可能性をもたらします。ジェネリックの初期実装では、コンパイラは生成されたバイトコードにキャスト (ジェネリックを使用しない場合、Java システム開発者がこれらのキャストを指定します) を挿入します。しかし、コンパイラーがより多くの型情報を利用できるという事実により、JVM の将来のバージョンで最適化の可能性が開かれます。

以上がJavaジェネリックとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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