ジェネリックメソッド
| 日本語 | 総称関数 |
| 英語 | generic method |
| ふりがな | じぇねりっくめそっど |
| フリガナ | ジェネリックメソッド |
メソッドの引数やローカル変数の型を、呼び出す際に指定できるメソッド。
J2SE 5.0で追加された構文。
メソッド定義の際に、アクセス修飾子の右に「<T>」という「型パラメーター」を指定すると、そのメソッドはジェネリックメソッドとなる。
ジェネリックメソッド内では、この型パラメーター「<T>」で指定した「T」という単語が、任意の型に置き換えられるようになる。
型の指定は、引数をT型にすれば、渡した変数やリテラルの型によって自動的に指定できる。
また、メソッド名の左側に「<型名>」を付けることで明示することもできる。たとえば「<String>」を付けると、TがStringに置き換わる形となる。
型にはクラスやインターフェイスといった参照型しか指定できない。プリミティブ型を指定することはできない。
ただしボクシング変換が機能するため、引数にプリミティブ型を渡すと自動的に対応するラッパークラスが指定される。
J2SE 5.0で追加された構文。
メソッド定義の際に、アクセス修飾子の右に「<T>」という「型パラメーター」を指定すると、そのメソッドはジェネリックメソッドとなる。
ジェネリックメソッド内では、この型パラメーター「<T>」で指定した「T」という単語が、任意の型に置き換えられるようになる。
型の指定は、引数をT型にすれば、渡した変数やリテラルの型によって自動的に指定できる。
また、メソッド名の左側に「<型名>」を付けることで明示することもできる。たとえば「<String>」を付けると、TがStringに置き換わる形となる。
型にはクラスやインターフェイスといった参照型しか指定できない。プリミティブ型を指定することはできない。
ただしボクシング変換が機能するため、引数にプリミティブ型を渡すと自動的に対応するラッパークラスが指定される。
参考サイト
- (参考サイトはありません)
// 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
}
}
/**
* ジェネリックメソッドを持つクラス。
*/
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
}
}




