Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

書籍 パーフェクトJava | ジェネリックス

概要

Javaジェネリックスについて

パラメータ化された型

ジェネリックスのインスタンス

型変数

ListのEに当たる部分

型引数

ListのStringに当たる部分

型変数名の慣例

変数名 由来
E element
K key
V value
T type

境界のある型パラメータ

基底クラスもしくは、インターフェ−スの型を限定することが出来る。
複数あるばあいあは&でつなげることが可能。
クラスとインターフェースを同時に指定する場合はクラスを先に書きます。

E extends Parent
E extends ParentA & ParentB
E extends ParentImpl & ParentIntf

型引数のワイルドカード

上位型の変数に買い型のオブジェクトを指定可能になる。

ワイルドカードのサンプルコード

package perfect.generics;

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

public class SampleGenerics {
  public static void main(String[] args) {
    List<? extends Parent> list;
    List<ChildA> listA = new ArrayList<ChildA>();
    listA.add(new ChildA());
    List<ChildB> listB = new ArrayList<ChildB>();
    listB.add(new ChildB());
    list = listA;
    System.out.println(list.get(0).getClass());
    list = listB;
    System.out.println(list.get(0).getClass());
    }
}

出力

class perfect.generics.ChildA
class perfect.generics.ChildB