質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

1201閲覧

Javaの文法についての質問です。

Chikin

総合スコア38

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/09/13 05:50

Javaのメソッドの引数で、

lang

1void putAll( Map<? extends K, ?extends V>m){ 2... 3}

上記のような書き方を見かけるんですが、このextendsはどのような意味なのでしょうか?
Kを継承したキー、Vを継承した値をもつMapが引数だととらえると訳がわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

extendsを付けることで、putAllを実装している側のクラスのK,Vと互換性はあるが異なる型のキーと値を持つ他のMapを受け付けることができるようになります。

下記の例では、putAllされる側はK,VともにCharSequenceで、putAllする側はString,StringBuilderにしていますが、コンパイルが通ります。
putAllK,Vextendsの無くしてしまうと、コンパイルが通らなくなります。

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

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chikin

2015/09/13 08:23

今回の場合CharSequenceがKクラスということですね! ようやく理解できました。 コードまでわざわざありがとうございます。
guest

0

ベストアンサー

次のページが参考になると思います。
参考情報

  • <? extends ...>や<? super ...>って何? [http://qiita.com/sukoyakarizumu/items/a95d88e294940c31b6fc](http://qiita.com/sukoyakarizumu/items/a95d88e294940c31b6fc)

投稿2015/09/13 07:31

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chikin

2015/09/13 08:24

ものすごくわかりやすいサイトありがとうございます。 とんでもない勘違いをしておりました。 Kクラスが実際にあると思ってました。
guest

0

Kを継承したキー、Vを継承した値をもつMapが引数

それで合っていると思います.ただこの場合継承したものではなく,K自体がキー,またはV自体が値,もしくはその両方を満たしたMapでも引数に取れる事になります.
要は「キーがK型として扱えて,値がV型として扱える」Mapであればいいということになります.

投稿2015/09/13 06:02

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chikin

2015/09/13 08:18

みなさんの解答のおかげでやっと理解できました。 Kクラスとやらが存在していて、そのクラスの継承クラスが入ると勘違いしていました。 Kクラスというものはなくて、メソッドを呼び出すときに引数で指定したMapのキーにあたるクラスのことだったんですね。 解答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問