株式会社イーブ|未経験・転職の方も就職可能。Javaプログラマー育成のエキスパート

HOMEJAVA技術者育成システム開発求人情報個人情報保護

第 26 回 ~ ジェネリックスクラス ~

トップページ > Java技術者育成 > Javaワンポイント > 第 26 回 ~ ジェネリックスクラス ~

今回のテーマは「ジェネリックスクラス」です。


まず「ジェネリックスクラスとは何ぞや」というところから始めます。
前回ジェネリックスメソッドについて書きましたので、ジェネリックスクラスのイメージはある程度つかめるのではないかと思います。
ジェネリックスクラスとは、クラス名の後ろに<T>や<E>といった型パラメータを指定して宣言するクラスです。
代表的なジェネリックスクラスとして、ListやSetなどのコレクションがあります。
コレクションのソート時に使うComparator、Comparableなどもジェネリックスクラスになっています。


それでは実際にサンプルを見て確認していきましょう。
まずはいつものSportsインターフェースとその具象クラスです。



public interface Sports {
    void play();
}


public class Badminton implements Sports {
    @Override
    public void play() {
        System.out.println("バドミントンして遊びます。");
    }
}


public class Volleyball implements Sports {
    @Override
    public void play() {
        System.out.println("バレーボールして遊びます。");
    }
}



今回はPlayerクラスをジェネリックスクラスにしました。
コレクションのTと、その要素のEという二つの型パラメータを定義しています。
Tを拡張for文で使えることと、Eがplayメソッドを使用できることに注目してください。


import java.util.Collection;


public class Player<E extends Sports, T extends Collection<E>> {
    private T t;


    public Player(T t) {
        this.t = t;
    }


    public void play() {
        System.out.println("ウォームアップします。");


        for (E e : t) {
            e.play();
        }


        System.out.println("クールダウンします。");
    }
}



Mainクラスです。
Listと同様にPlayerにも型パラメータをつけて使用します。


import java.util.ArrayList;
import java.util.List;


public class Main {
    public static void main(String[] args) {
        List<Sports> sportList = new ArrayList<Sports>();
        sportList.add(new Badminton());
        sportList.add(new Volleyball());


        Player<Sports, List<Sports>> player = new Player<Sports, List<Sports>>(sportList);
        player.play();
    }
}



ジェネリックスクラスはいかがだったでしょうか。
ジェネリックスクラスを自作する機会の有無に関わらず、Javaの文法上こういうことができるということは知っておいたほうがよいでしょう。


[Javaワンポイント]内の前後の記事
第 27 回 ~ cloneメソッド ~
→ 第 26 回 ~ ジェネリックスクラス ~
第 25 回 ~ ジェネリックスメソッド ~


■更新日時での前後の記事
11月21日 お天気
→ 第 26 回 ~ ジェネリックスクラス ~
11月20日 お天気