JavaA2Z

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

ジェネリックメソッド

日本語 総称関数
英語 generic method
ふりがな じぇねりっくめそっど
フリガナ ジェネリックメソッド

解説

メソッド引数ローカル変数を、呼び出す際に指定できるメソッド
J2SE 5.0で追加された構文。

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

ジェネリックメソッド内では、このパラメーター<T>」で指定した「T」という単語が、任意のに置き換えられるようになる。
の指定は、引数をTにすれば、渡した変数リテラルによって自動的に指定できる。
また、メソッド名の左側に「<>」を付けることで明示することもできる。たとえば「<String>」を付けると、TがStringに置き換わる形となる。

にはクラスインターフェイスといった参照しか指定できない。プリミティブ型を指定することはできない。
ただしボクシング変換が機能するため、引数プリミティブ型を渡すと自動的に対応するラッパークラスが指定される。

参考サイト

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

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

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

// Sample.java

/**
 * ジェネリックメソッドを持つクラス。
 */
class HasGenericMethod
{
    /**
     * toString()メソッドを呼び出すジェネリックメソッド。
     */
    //   ↓↓↓これが付くとジェネリックメソッドになります。
    public <T> void callToString( T t )
    {
        // T型の引数tのtoString()メソッドを呼び出して
        // 出力します。
        String string = t.toString();
        System.out.println( string );
        // 出力結果は渡した値次第です。

        // 型変数Tは、渡した引数によって変わります。
        // ただし、Tが何らかのクラスとみなした処理は
        // 書けません。この例の場合はObjectクラスの
        // メソッドしか使えません。

        // ※コンパイルエラーの例
        // t.abc();
        // ※javacのエラーメッセージ
        // シンボルを見つけられません。
        // シンボル: メソッド abc()
        // 場所    : java.lang.Object の クラス
        // ※Eclipseのエラーメッセージ
        // メソッド abc() は型 T で未定義です
        // ※コンパイルエラーの例ここまで
    }
}

public class Sample
{
    public static void main( String[] args )
    {
        HasGenericMethod generic = new HasGenericMethod();

        // Integerクラスのインスタンスへの参照を
        // callToString()メソッドに渡して呼び出します。
        Integer integer = new Integer( 100 );
        generic.callToString( integer );
        // 100

        // Stringクラスのインスタンスへの参照を
        // callToString()メソッドに渡して呼び出します。
        String string = "あいうえお";
        generic.callToString( string );
        // あいうえお

        // このように、callToString()メソッドの引数の型Tは
        // 渡した参照型によって変わります。

        // 型変数にプリミティブ型を使用することはできません。
        // ただし、ボクシング変換を使用して渡すことが
        // 可能です。
        int i = 200;
        generic.callToString( i );
        // 200

        // この場合、型変数にはラッパークラスが指定され
        // (上記の場合、TにIntegerクラスが指定されます)
        // ボクシング変換が行われて渡されます。

        // ちなみに以下のように、型を明示的に指定する
        // こともできます。
        generic.<Object>callToString( 300 );
        // 300
    }
}
// Sample.java

/**
 * ジェネリックメソッドを持つクラス。
 */
class HasGenericMethod
{
    /**
     * toString()メソッドを呼び出すジェネリックメソッド。
     */
    //   ↓↓↓これが付くとジェネリックメソッドになります。
    public <T> void callToString( T t )
    {
        // T型の引数tのtoString()メソッドを呼び出して
        // 出力します。
        String string = t.toString();
        System.out.println( string );
        // 出力結果は渡した値次第です。

        // 型変数Tは、渡した引数によって変わります。
        // ただし、Tが何らかのクラスとみなした処理は
        // 書けません。この例の場合はObjectクラスの
        // メソッドしか使えません。

        // ※コンパイルエラーの例
        // t.abc();
        // ※javacのエラーメッセージ
        // シンボルを見つけられません。
        // シンボル: メソッド abc()
        // 場所    : java.lang.Object の クラス
        // ※Eclipseのエラーメッセージ
        // メソッド abc() は型 T で未定義です
        // ※コンパイルエラーの例ここまで
    }
}

public class Sample
{
    public static void main( String[] args )
    {
        HasGenericMethod generic = new HasGenericMethod();

        // Integerクラスのインスタンスへの参照を
        // callToString()メソッドに渡して呼び出します。
        Integer integer = new Integer( 100 );
        generic.callToString( integer );
        // 100

        // Stringクラスのインスタンスへの参照を
        // callToString()メソッドに渡して呼び出します。
        String string = "あいうえお";
        generic.callToString( string );
        // あいうえお

        // このように、callToString()メソッドの引数の型Tは
        // 渡した参照型によって変わります。

        // 型変数にプリミティブ型を使用することはできません。
        // ただし、ボクシング変換を使用して渡すことが
        // 可能です。
        int i = 200;
        generic.callToString( i );
        // 200

        // この場合、型変数にはラッパークラスが指定され
        // (上記の場合、TにIntegerクラスが指定されます)
        // ボクシング変換が行われて渡されます。

        // ちなみに以下のように、型を明示的に指定する
        // こともできます。
        generic.<Object>callToString( 300 );
        // 300
    }
}

この単語を含むページ

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

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

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

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