ジェネリクス(Generics)の基礎を解説!(メソッド編)

java

前回はジェネリクス(Generics)を使ったクラスについて紹介しました。ジェネリクス(Generics)はもちろんメソッドにも使用することが出来ます。今回はメソッド編ということでジェネリクス(Generics)を使ったメソッドを一気に紹介していきます。

[スポンサーリンク]

目次

  1. ジェネリクス(Generics)を指定したメソッド
  2. Listのジェネリクス(Generics)を指定したメソッド
  3. extendsを使ったジェネリクス(Generics)なメソッド

ジェネリクス(Generics)を指定したメソッド

public class MethodOfGenerics {

    /**
     * メイン処理です。
     */
    public static void main(String arg[]) {
        // 引数にクラスを渡します。
        String objName = getObjectName(new String());
        System.out.println("指定したクラスは、" + objName);
    }

    /**
     * クラス名称を取得します。
     */
    private static <T> String getObjectName(T object) {
        return object.getClass().toString();
    }
}

実行結果

>実行結果
指定したクラスは、class java.lang.String

Listのジェネリクス(Generics)を指定したメソッド

public class MethodOfGenericsList {

    /**
     * メイン処理です。
     */
    public static void main(String arg[]) {
        // リストを生成します。
        List<String> list = new ArrayList<String>();
        list.add("リスト1です。");
        list.add("リスト2です。");

        // 引数にクラスを渡します。
        viewList(list);
    }

    /**
     * Listの型にジェネリクスを指定します。
     */
    private static <T> void viewList(List<T> list) {
        for (T t : list) {
            System.out.println(t);
        }
    }
}

実行結果

>実行結果
リスト1です。
リスト2です。

extendsを使ったジェネリクス(Generics)なメソッド

public class MethodOfGenericsExtends {

    /**
     * ジェネリクスで指定されるextendsクラスです。
     */
    private static abstract class Base {
        public String baseParam;
    }

    /**
     * Baseを継承したクラスです。
     * その1
     */
    private static class Abase extends Base {
    }

    /**
     * Baseを継承したクラスです。
     * その2
     */
    private static class Bbase extends Base {
    }

    /**
     * メイン処理です。
     */
    public static void main(String arg[]) {
        // 引数にAbaseクラスを渡します。
        Abase aBase = new Abase();
        aBase.baseParam = "Abaseクラスです。";
        System.out.println(getParam(aBase));

        // 引数にBbaseクラスを渡します。
        Bbase bBase = new Bbase();
        bBase.baseParam = "Bbaseクラスです。";
        System.out.println(getParam(bBase));
    }

    /**
     * BaseクラスのbaseParamを取得します。
     */
    private static <T extends Base> String getParam(T object) {
        return object.baseParam;
    }
}

実行結果

>実行結果
Abaseクラスです。
Bbaseクラスです。