|
||||||||||||||||||||||
|
境界型 (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) といいます。 |
|
© 2010 Java 入門 |
|||||||||||||||||||