を使った場合、一度型を指定した場合、
その型が以外は使用できなくなります。
例えば
Set numSet = new HashSet();
numSet.add(Integer.valueOf(123));
はエラーになります。
上記のとおり、NumberとIntegerの型が一致していないためです。
IntegerはNumberを継承したクラスなので、使いたい場合もあるかも知れません。
そういう場合はextendsを使います。
Setは変更できないですが、
仮に変更できたとしたら以下のように修正することで対応できます。
public void add( extends T> a) {
・・・
}
## パラメータの拡張 2 super
extendsと同様にsuperも使えます。
例えば
List numList = new ArrayList();
numList.get(new Number());
はエラーになるので、superを使います。
Listは変更できな(ry、
以下のように修正することで対応できます。
public void get( super T> a) {
・・・
}
## PECSと覚える
producer(プロデューサー)は extends、consumer(コンシューマー)は superと表して、
PECSと覚えると良いそうです。
producer:引数のデータがクラス内で利用する場合
consumer:引数にクラス内のデータが利用される場合
0 件のコメント:
コメントを投稿