Java 入門

ホーム > ジェネリックス > 境界型 (Bounded Types)

境界型 (Bounded Types)

はじめにこのページで用いる Person クラス、そしてそのサブクラスである SalesPerson クラスを定義します。

public class Person {
  String name;
  public Person(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
}

public class SalesPerson extends Person {
  int empID;
  public SalesPerson(int empID, String name){
    super(name);
    this.empID = empID;
  }
  public int getEmpID(){
    return empID;
  }
}

getName メソッドというメソッドはスーパークラスである Person クラスにて実装されていることに注意してください。この点に注意しつつ、次のメソッドをみてください。

public static <T extends Person> void showName(T[] a){
  for(Person p : a){
    System.out.println(p.getName());
  }
}

T 型の配列を受け取って、その配列に対して for-each 文を用いてそれぞれの要素の getName メソッドを呼び出しています。

このコードが正しく動くためには、引数として渡される型は Person クラスから派生したクラスでなければなりません。 なぜなら、getName メソッドは Person クラスで定義されているからです。例えば String オブジェクトでは getName メソッドがありませんので、処理は失敗します (というか意味がありません。もともとそんなメソッドがないのですから)。

このように、ジェネリックスの型として一定の制限をかけたい場合に、それを指定することができます。それがメソッド定義の以下の黄色でハイライトした部分です。

public static <T extends Person> void showName(T[] a){
...

<T extends Person> という表記で、「T は Person から派生したクラスです」 と指定することができます。

こうして制限付けされた型を境界型 (Bounded Type) といいます。

ホーム > ジェネリックス > 境界型 (Bounded Types)