いつか、技術ブログを

新人SE(OJT中)が技術ブログを書きたがっているブログです

Javaのジェネリクスの使い方

ジェネリクスとは

ジェネリクスとは「<>」記号で囲まれたデータ型名をクラスやメソッドに付けることで、Integer型やString型などの様々な型に対応する汎用的なクラスやメソッドを作る機能のことです。
【Java入門】ジェネリクス(Generics・総称型)の使い方 | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイトより

よく使う例として、コレクションの後ろに<>を使用して格納したい要素の型を指定します。
あとは↑のサイトにわかりやすい説明がありますが、自分でクラスを作るときにジェネリクスを使うことで、クラス内の変数の型を、インスタンスを作るときに指定することができるみたいです。
<>に指定するデータ型は、型パラメータと呼ばれます。
指定できるのは参照型のみで、基本データ型(int,charなど)は指定できません。

ジェネリクスを使わないでArrayListを使う

ジェネリクスがなかったとき、要素をコレクションから取り出すには、キャストをする必要がありました。

エラーの出る例
import java.util.ArrayList;

public class GenericsSample1 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();

        arrayList.add("one");
        arrayList.add("two");
        arrayList.add("three");

        String s = arrayList.get(2); //キャストしてない
        System.out.println(s);
    }
}

実行結果(エラー)

型の不一致: Object から String には変換できません
エラーの出ない例
import java.util.ArrayList;

public class GenericsSample1 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();

        arrayList.add("one");
        arrayList.add("two");
        arrayList.add("three");

        String s = (String) arrayList.get(2); //キャストしている
        System.out.println(s);
    }
}

実行結果

three

上記のキャストしたコードでも、arrayListに入っているのがStringでなかった場合にはエラーが出てしまいます。

ジェネリクスを使ってArrayListを使う

import java.util.ArrayList;

public class GenericsSample2 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>(); //ジェネリクスを使用
        arrayList.add("one");
        arrayList.add("two");
        arrayList.add("three");

        String s = arrayList.get(2); //キャストする必要がない
        System.out.println(s);
    }
}

実行結果

three

感想

ジェネリクスってわからないなって思ってたんですけど、ArrayListとかで普通に使ってました。
もっとむずかしい使い方(クラスとかメソッドとかにつける?)もあるみたいなので、勉強していきたいです。

あとやっぱり何か作らないといけないなって思ってるのですが…
実際にコードを書く仕事とかに配属?してもらうには、JavaのSilverとか取って、「せっかくなんでJavaを扱うところがいいです!」って言ったほうがいいのかな?とか迷ってます…そのためには資格の問題集とかやった方がいいのかな、とか…
別のSIerで2年働いてる先輩も、テストと書類作成ばっかりやっててコード書いたことないって言ってたので…最初くらいはコード書きたいなぁ…