LoginSignup
0
0

ジェネリクスのワイルドカード

Posted at

ジェネリクスとは

異なるデータ型に対して同じ処理を行うための仕組み。
→データ型ごとにメソッドを作る必要がなくなる

ワイルドカードとは

より柔軟に扱うための構文。
IntegerはNumberのサブクラスなので

Number num = Integer.valueOf(10);

↑はOK

List<Number> list = new ArrayList<Number>();  
List<Integer> integerList = new ArrayList<Integer>();  
list = integerList;

↑はNG

変数には親クラス型で宣言したものに、サブクラスのインスタンスを格納することができる。
ジェネリクスを使ったものについては、サブクラスのインスタンスを格納することはできない。

非境界ワイルドカード型

あらゆる型のオブジェクトを受け入れる型。
<?>と記載する。

List<?> myList = new ArrayList<>();  
List<Integer> list1 = new ArrayList<>();  
List<String> list2 = new ArrayList<>();  
  
myList = list1;  
myList = list2;

上限境界ワイルドカード型

ある型をサブクラスのみを受け入れる型。
<? extends E>と記載する。

List<? extends Number> myList = new ArrayList<>();  
List<Integer> list1 = new ArrayList<>();  
List<String> list2 = new ArrayList<>();  
  
myList = list1;  
myList = list2; // error

下限境界ワイルドカード型

ある型のスーパークラスのみを受け入れる型。
<? super E>と記載する。

List<? super Number> myList = new ArrayList<>();  
List<Object> list1 = new ArrayList<>();  
List<Integer> list2 = new ArrayList<>();  
  
myList = list1;  
myList = list2; // error
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0