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

システム開発ブログ

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

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

ジェネリクス(総称)の仕組み

加藤
加藤 (2010年8月19日 13:49)
産業システム部 / JAVA
みなさん、こんにちは。
今回は、J2SE5.0から追加された言語仕様ジェネリクス「総称」が
どのようにして実現されているのか、
List及び、ArrayListを例にして説明しようと思います。


以下に、Listインタフェースのコードの一部を抜粋したものを記載します。
public interface List<E> extends Collection<E> {

    public boolean add(E object);

    public E get(int index);

ListおよびCollectionの後ろに<E>と、従来のJava言語には無かった記法がされています。
まず、この記法について説明をします。

<>で囲まれている部分を「型引数」と呼びます。
型を引数(パラメータ)として受け取る部分を表しています。
メソッドの引数に対応するものだと考えてください。
<>内に記載するEは変数で、「型変数」と呼びます。
型そのものが格納される変数と考えてください。
このEがadd()メソッドの引数、およびget()メソッドの返り値として使用されています。

つまり型変数に指定された型のオブジェクトを引数として取り、
型変数に指定された型のオブジェクトを返り値として返すことを意味しています。

ListをString型のみを格納できるオブジェクトとして宣言したい場合、
List<String> list;
と記載しますが、これは、型変数EにStringを代入していることになります。
よって、上記のListインタフェースのコードは以下のように置き換えることができます。
public interface List<String> extends Collection<String> {

    public boolean add(String object);

    public String get(int index);

こうして見ると、List<String>型のオブジェクトにはString型しか追加できず、
また取り出すオブジェクトもString型に限定される仕組みがわかるかと思います。
ちなみに、Listインタフェースの実装クラスであるArrayListの場合は以下のようになります。
public class ArrayList<E> extends AbstractList<E>
             implements List<E>
                       , RandomAccess
                       , Cloneable
                       , Serializable {

    public boolean add(E object) {
        ・・・
    }

    public E get(int index) {
        ・・・
    }


ArrayListをString型のみを格納できるオブジェクトとして宣言したい場合、
List<String> list = new ArrayList<String>();
となるので、コードを以下のように置き換えることができます。

public class ArrayList<String> extends AbstractList<String>
             implements List<String>
                       , RandomAccess
                       , Cloneable
                       , Serializable {

    public boolean add(String object) {
        ・・・
    }

    public String get(int index) {
        ・・・
    }


以上の説明で、ジェネリクスの仕組みが大体わかっていただけたのではないかと思います。

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  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で。ぜひ、フォローをお願いします。