Java-generics-lower-bounded

提供:Dev Guides
移動先:案内検索

Javaジェネリック-下限のワイルドカード

疑問符(?)はワイルドカードを表し、ジェネリックの不明なタイプを表します。 型パラメータに渡すことができる型の種類を制限したい場合があるかもしれません。 たとえば、数値を操作するメソッドは、IntegerまたはNumberのようなスーパークラスのインスタンスのみを受け入れたい場合があります。

下限のワイルドカードパラメータを宣言するには、?をリストし、その後にsuperキーワード、その下限を続けます。

次の例は、superを使用して下限のワイルドカードを指定する方法を示しています。

package com.finddevguides;

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

public class GenericsTester {

   public static void addCat(List<? super Cat> catList) {
      catList.add(new RedCat());
      System.out.println("Cat Added");
   }

   public static void main(String[] args) {
      List<Animal> animalList= new ArrayList<Animal>();
      List<Cat> catList= new ArrayList<Cat>();
      List<RedCat> redCatList= new ArrayList<RedCat>();
      List<Dog> dogList= new ArrayList<Dog>();

     //add list of super class Animal of Cat class
      addCat(animalList);

     //add list of Cat class
      addCat(catList);

     //compile time error
     //can not add list of subclass RedCat of Cat class
     //addCat(redCatList);

     //compile time error
     //can not add list of subclass Dog of Superclass Animal of Cat class
     //addCat.addMethod(dogList);
   }
}
class Animal {}

class Cat extends Animal {}

class RedCat extends Cat {}

class Dog extends Animal {}

これは、次の結果を生成します-

Cat Added
Cat Added