Javaのメソッドの引数で、
lang
1void putAll( Map<? extends K, ?extends V>m){ 2... 3}
上記のような書き方を見かけるんですが、このextendsはどのような意味なのでしょうか?
Kを継承したキー、Vを継承した値をもつMapが引数だととらえると訳がわかりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
extends
を付けることで、putAll
を実装している側のクラスのK,V
と互換性はあるが異なる型のキーと値を持つ他のMap
を受け付けることができるようになります。
下記の例では、putAll
される側はK,V
ともにCharSequence
で、putAll
する側はString,StringBuilder
にしていますが、コンパイルが通ります。
putAll
のK,V
のextends
の無くしてしまうと、コンパイルが通らなくなります。
lang
1import java.util.HashMap; 2import java.util.Map; 3import java.util.Map.Entry; 4 5class MyMap<K, V> { 6 7 void putAll(Map<? extends K, ? extends V> m) { 8 for (Entry<? extends K, ? extends V> entry : m.entrySet()) { 9 System.out.printf("key=%s, value=%s%n", entry.getKey(), entry.getValue()); 10 } 11 } 12 13} 14 15public final class App { 16 17 public static void main(String[] args) { 18 MyMap<CharSequence, CharSequence> myMap = new MyMap<>(); 19 Map<String, StringBuilder> m = new HashMap<>(); 20 myMap.putAll(m); 21 } 22 23}
投稿2015/09/13 07:08
総合スコア9388
0
ベストアンサー
次のページが参考になると思います。
参考情報
- <? extends ...>や<? super ...>って何? [http://qiita.com/sukoyakarizumu/items/a95d88e294940c31b6fc](http://qiita.com/sukoyakarizumu/items/a95d88e294940c31b6fc)
投稿2015/09/13 07:31
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Kを継承したキー、Vを継承した値をもつMapが引数
それで合っていると思います.ただこの場合継承したものではなく,K自体がキー,またはV自体が値,もしくはその両方を満たしたMapでも引数に取れる事になります.
要は「キーがK型として扱えて,値がV型として扱える」Mapであればいいということになります.
投稿2015/09/13 06:02
総合スコア20649
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/13 08:23