Java 入門

ホーム > ジェネリックス > ワイルドカード

ワイルドカード

クラスの定義としてではなく、通常の型のようにジェネリックスの型を指定することもできます。

次の例をみてください。

public static void main(String[] args) {
  //Box<String> b = new Box<String>("Hello");
  SalesPerson p = new SalesPerson(123,"Keisuke");
  Box<SalesPerson> b = new Box<SalesPerson>(p);
  foo(b);
}
  
public static void foo(Box<SalesPerson> bp){
  // Do something
}

この例では foo メソッドは Box<SalesPerson> 型のパラメータのみを受けとります。

もし、この foo メソッドが Person から派生した全てのサブクラスを受けとるのであれば、次のように表記できます。

public static void foo(Box<? extends Person> bp){
  // Do something
}

このように、「このクラスのサブクラスならなんでも」という風にしてをする場合は、ワイルドカードとしてクエスチョンマーク (?) を用いて表現します。

この場合のように派生クラス (サブクラス) なら何でも、と指定する場合は、? 記号と extends というキーワードを用います。

extends は通常のクラス定義と同様なので、ピンと来やすいのではないでしょうか。

この他、実は スーパーバウンド という型の指定方法もあります。

» スーパーバウンド

ホーム > ジェネリックス > ワイルドカード