=
ホーム
On Your Mark
ホーム
/
設計(Java)
/
【Java】 Effective Java 第二版 お勉強 PECS
2013年11月10日日曜日
Java
基本
設計(Java)
t
f
B!
P
L
# ジェネリックス ## 今日 読んだところ P 131~137 ## 項目 APIの柔軟性向上のために境界ワイルドカードを使用する<br /> ## パラメータの拡張 extends <T>を使った場合、一度型を指定した場合、<br> その型が以外は使用できなくなります。<br> <br> 例えば<br> <pre> Set<Number> numSet = new HashSet<Number>(); numSet.add(Integer.valueOf(123)); </pre> はエラーになります。<br> 上記のとおり、NumberとIntegerの型が一致していないためです。<br> IntegerはNumberを継承したクラスなので、使いたい場合もあるかも知れません。<br> <br> そういう場合はextendsを使います。<br> Setは変更できないですが、<br> 仮に変更できたとしたら以下のように修正することで対応できます。<br> <pre> public void add(<? extends T> a) { ・・・ } </pre> ## パラメータの拡張 2 super extendsと同様にsuperも使えます。<br> <br> 例えば<br> <pre> List<Integer> numList = new ArrayList<Integer>(); numList.get(new Number()); </pre> はエラーになるので、superを使います。<br> <br> Listは変更できな(ry、<br> 以下のように修正することで対応できます。<br> <pre> public void get(<? super T> a) { ・・・ } </pre> ## PECSと覚える producer(プロデューサー)は extends、consumer(コンシューマー)は superと表して、 PECSと覚えると良いそうです。 producer:引数のデータがクラス内で利用する場合 consumer:引数にクラス内のデータが利用される場合
Translate
このブログを検索
ブログアーカイブ
►
2020
(38)
6月 2020
(6)
5月 2020
(10)
4月 2020
(10)
3月 2020
(4)
2月 2020
(5)
1月 2020
(3)
►
2019
(4)
1月 2019
(4)
►
2018
(23)
12月 2018
(3)
4月 2018
(11)
3月 2018
(9)
►
2014
(20)
7月 2014
(3)
1月 2014
(17)
▼
2013
(166)
12月 2013
(15)
11月 2013
(22)
10月 2013
(31)
9月 2013
(26)
8月 2013
(32)
7月 2013
(40)
今週の人気の記事
【git】 WindowsでGitを使う (msysgit + TortoiseGit)
【まとめ】GWはおうちでぬりえ 鉄道会社公式の電車ぬりえをまとめた
【まとめ】おうちでペーパークラフト 鉄道会社公式のペーパークラフトをまとめた
【MySQL】文字列をバイト数で切り取る
【予想】DXS シンカリオン ハローキティ登場!運転士は誰?
フォロワー
On Your Mark
QooQ
0 件のコメント:
コメントを投稿