⛳
[Java] ジェネリクス文法(3) ジェネリックメソッド
ジェネリクスメソッド
クラスではなく、一般クラス内のメソッドをジェネリクス化するものである。
GenericMethod クラスの生成
<span style=color:red>特定のメソッドをジェネリクス化する</span>
メソッドのリターンタイプの前に <> ジェネリクス文法を記述します。
staticはジェネリクスメソッドを便利に使うために書かれただけで、ジェネリクスメソッドとは関係ありません!
→オブジェクトなしで実行するとすぐに実行されます。
メソッド機能の例
引数としてデータが渡され、そのデータは型が決まっていません。
このような引数を受け取り、boxに保存し、データが保存されたboxを返すメソッド。
public class GenericMethod {
public static <T> Box<T> makeBox (T data){
Box<T> box = new Box<T>();
box.setData(data);
return box;
}
}
戻り値の型が決まっていないということは、< T > を付けるということです!
Box < T > は Box < T > クラスの姿であり、クラスも型が決まっていません
GenericMethodTest クラスの生成
Test クラスの中で main を呼び出し、ジェネリクスメソッドを呼び出します。
ジェネリクスメソッドの呼び出し
- ジェネリクスメソッドのデータ型はメソッド呼び出し時に指定します。
- データ型はメソッド名の前に書きます。
- 戻り値の型に合わせて変数を作成します!
public class GenericMethodTest {
public static void main(String[] args) {
Box<String> box1 = GenericMethod.<String>makeBox("wow");
Box<Integer> box2 = GenericMethod.<Integer>makeBox(123456789);
System.out.println(box1.getData());
System.out.println(box2.getData());
}
}
参考) 型は省略可能
java Box<String> box1 = GenericMethod.makeBox("wow"); Box<Integer> box2 = GenericMethod.makeBox(123456789);
追加1) ジェネリクス型のパラメータを入れる練習
GenericMethodクラスの中でpeekBoxジェネリクスメソッドを生成
public static <T> void peekBox(Box<T> box){
System.out.println(box.getData());
}
クラスでジェネリクスメソッドを呼び出して使用する!
Box<String> box = new Box<>();
box.setData("box");
Box<Integer> box3 = new Box<>();
box3.setData(123);
GenericMethod.peekBox(box);
GenericMethod.peekBox(box3);
結果
box
123
ジェネリクスメソッドのように見えるが、そうではないのは?
追加2) 注意!
//これはジェネリクスメソットではない !
public static void peekBox2(Box<Object> box){
peekBox2には Box<String> オブジェクトが使えるか ---> 正解は NO !!!!!!!
peekBox2は Objectが 入った型だけ受け入れる
⇒つまり、パラメーターは Box<object>じゃなきゃ行けない!!!!!!!!!!!
下を参考すれば理解しやいです。
これはリストだけできるから
//これはジェネリクスメソットではない2 !
public static void peekBox3(Box<List> box){
System.out.println(box.getData());
}
ジェネリクスを今うまく使うということではなく、理解してこういうものがあるということです!いつか私も上手に使えるようになることが目標です😉
Discussion