システム開発ブログ/ 産業システム部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

ジェネリクス(総称)について

加藤
加藤 (2010年7月15日 17:45)
産業システム部 / JAVA
みなさん、こんにちは。
今回は、J2SE5.0から追加された言語仕様ジェネリクス「総称」について書こうと思います。

◇ジェネリクスとは

ジェネリクスとは、「総称性(Genericity)」「ジェネリック・プログラミング」とも呼ばれるプログラミング技法です。
データの型に束縛されず、型そのものをパラメータ化して扱うことを実現します。

Javaでは、この言語拡張によりコンパイル時の型保証を実現しながら、
型またはメソッドを、さまざまな型のオブジェクトに対して使用できるようになりました。
これが『Collections Framework』に適用されたことで、従来のキャスト操作の煩雑さが改善されました。

では、さっそく『Collections Framework』で、ジェネリクスを利用しない場合と、
利用した場合の例を見ながら、比較してみましょう。

例:ジェネリクスを利用しない場合
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");

for (int i1 = 0; i1 < list.size(); i1++) {
    String sPrint = (String)list.get(i1); //【1】
    System.out.println(sPrint);
}
Listはどのような型のオブジェクトも格納できるコレクションです。
利点でもあるのですが、以下のような欠点も抱えています。

格納するオブジェクトの型を限定できない。
限定できないがために【1】のようにget()メソッドで取り出す際に、キャストする必要があります。
よって、コンパイル時に型保証がなく実行時まで問題が発見できないという欠点があります。

しかし、ジェネリクスを利用することによりその欠点を補うことができるようになります。


例:ジェネリクスを利用した場合
List<String> list = new ArrayList<String>(); // 【2】
list.add("aaa");
list.add("bbb");
list.add("ccc");

for (int i1 = 0; i1 < list.size(); i1++) {
    String sPrint = list.get(i1); //【3】
    System.out.println(sPrint);
}
ジェネリクスは、【2】のようにListを作成する際に、
Listとその実装クラスであるArrayListに対して、
<>の中にStringを指定して作成することにより
String型のみを格納できるListとして宣言することができます。

Stringに限定されているため、add()メソッドでListに追加できるオブジェクトはStringのみとなります。
他の型を格納しようとするとコンパイルエラーとなります。
また、 get()メソッドで返されるオブジェクトもStringのみとなります。
よって、【3】のように従来行っていたString型へのキャストが不要になります。

このように、ジェネリクスを利用すればコンパイル時に型保証がされるので、
従来の『Collections Framework』にあった、コンパイル時の型保証がされない問題と、
キャスト操作の煩雑さが解消されていることがわかるかと思います。

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。