JavaA2Z

KAB-studio > プログラミング > JavaA2Z > ジェネリッククラスとは

ジェネリッククラス

日本語 総称型
英語 generic class
ふりがな じぇねりっくくらす
フリガナ ジェネリッククラス

解説

クラス内のを使用時に指定できるクラス
J2SE 5.0で追加された構文。

クラス定義の際に、クラス名の右に「<T>」という「パラメーター」を指定すると、そのクラスはジェネリッククラスとなる。

ジェネリッククラス内では、このパラメーター<T>」で指定した「T」という単語が、任意のに置き換えられるようになる。
の指定は、ジェネリッククラスを使用する際にクラス名の右側に「<>」を付けてう。たとえば「<String>」を付けると、TがStringに置き換わる形となる。

ただし、にはクラスインターフェイスといった参照しか指定できない。プリミティブ型を指定するとコンパイルエラーとなる。
また、ジェネリッククラス内のTで宣言した変数は、指定したに関係なくObjectクラス変数とみなされるため、当然メソッドObjectクラスのものしか呼び出せない。パラメーターの指定によっては他のクラスメソッド呼び出すこともできるが、いずれにせよTを指定したクラスとして自由に使用できるわけではない。
このように、ジェネリッククラスを使用しても自由度が上がるわけではない。むしろ、Objectクラスを使用していた箇所に制限を設けるのがジェネリッククラスのメリットである。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java

/**
 * ジェネリッククラスの例。
 */
//           これ↓↓が付くとジェネリッククラスになります。
class GenericClass<T>
{
    // このクラス内では、「T」は指定された型になります。
    // Integerクラスを指定すればTはIntegerに、
    // Stringクラスを指定すればTはStringクラスになります。

    /**
     * privateなフィールド。
     */
    private T data;

    /**
     * setter。
     */
    public void setData( T value )
    {
        this.data = value;
    }

    /**
     * getter。
     */
    public T getData()
    {
        return data;
    }
}

public class Sample
{
    public static void main( String[] args )
    {
        // 型変数TにStringを指定して、GenericClassクラスの
        // 参照型変数を作成します。
        GenericClass<String> genericClass;
        // 型変数TにStringを指定して、GenericClassクラスの
        // インスタンスを作成し、その参照を上記の変数に
        // 代入します。
        genericClass = new GenericClass<String>();

        // setData()メソッドの引数の型TはStringクラスに
        // なるので、Stringクラスである文字列を渡せます。
        genericClass.setData( "あいうえお" );

        // 同じく、getData()メソッドの戻り値の型Tは
        // Stringクラスになるので、Stringクラスの
        // 参照型変数で受け取れます。
        String s = genericClass.getData();
        System.out.println( s );
        // あいうえお

        // このように、ジェネリッククラスはクラス内の型を
        // 使用時に指定することができるわけです。

        // ただし、その型ににプリミティブ型を指定することは
        // できません。
        // ※コンパイルエラーの例
        // GenericClass<int> genericClass2;
        // ※javacのエラーメッセージ
        // 予期しない型
        // 検出値  : int
        // 期待値  : 参照
        // ※Eclipseのエラーメッセージ
        // トークン "int" に構文エラーがあります。
        // このトークンの後には Dimensions を指定する必要があります
        // ※コンパイルエラーの例ここまで

        // このように、型変数Tには必ずクラスやインターフェイスを
        // 指定します。
   }
}
// Sample.java

/**
 * ジェネリッククラスの例。
 */
//           これ↓↓が付くとジェネリッククラスになります。
class GenericClass<T>
{
    // このクラス内では、「T」は指定された型になります。
    // Integerクラスを指定すればTはIntegerに、
    // Stringクラスを指定すればTはStringクラスになります。

    /**
     * privateなフィールド。
     */
    private T data;

    /**
     * setter。
     */
    public void setData( T value )
    {
        this.data = value;
    }

    /**
     * getter。
     */
    public T getData()
    {
        return data;
    }
}

public class Sample
{
    public static void main( String[] args )
    {
        // 型変数TにStringを指定して、GenericClassクラスの
        // 参照型変数を作成します。
        GenericClass<String> genericClass;
        // 型変数TにStringを指定して、GenericClassクラスの
        // インスタンスを作成し、その参照を上記の変数に
        // 代入します。
        genericClass = new GenericClass<String>();

        // setData()メソッドの引数の型TはStringクラスに
        // なるので、Stringクラスである文字列を渡せます。
        genericClass.setData( "あいうえお" );

        // 同じく、getData()メソッドの戻り値の型Tは
        // Stringクラスになるので、Stringクラスの
        // 参照型変数で受け取れます。
        String s = genericClass.getData();
        System.out.println( s );
        // あいうえお

        // このように、ジェネリッククラスはクラス内の型を
        // 使用時に指定することができるわけです。

        // ただし、その型ににプリミティブ型を指定することは
        // できません。
        // ※コンパイルエラーの例
        // GenericClass<int> genericClass2;
        // ※javacのエラーメッセージ
        // 予期しない型
        // 検出値  : int
        // 期待値  : 参照
        // ※Eclipseのエラーメッセージ
        // トークン "int" に構文エラーがあります。
        // このトークンの後には Dimensions を指定する必要があります
        // ※コンパイルエラーの例ここまで

        // このように、型変数Tには必ずクラスやインターフェイスを
        // 指定します。
   }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2009/06/06
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。