Java Gold SE8の問題を解いているのですが、下記について混乱しています。
どなたか、「簡単に考えてここはこうなんだよ」とお分かりになる方がいらっしゃいましたら教えて下さい。
Java Gold SE8問題集(俗に言う黒本)の総仕上げ問題で次のような問題が出ています。
P406 問71
ジェネリック・クラスの宣言として正しいものを選びなさい。(1つ選択)
A.public class Test<? extends Integer> {}
B.public class Test<T implements Comparator> {}
C.public class Test<T, U extends T> {}
D.public class Test<T super String> {}
解答と説明は次の通りです。
P450 答え71 C
ジェネリック・タイプの宣言の型パラメータにおける型変数にワイルドカード「?」を使用することはできません。したがって、選択肢Aは誤りです。また、型変数の上限境界の設定にはインターフェースを指定する場合でもextendsキーワードを使用する必要があるため、選択肢Bも誤りです。選択肢Cは、TとUの2つの型変数が宣言されており、そのうちUの上限境界をTに設定している正しいジェネリック・タイプの宣言です。したがって、選択肢Cは正解です。型変数の上限境界に使用できるのはextendsキーワードであるため、選択肢Dも誤りです。
〜引用ここまで〜
Bがimplementsできないのは分かるのですが、AとDは(個人的感覚として)結構頻繁に見る型だったので、なぜAとDがダメなのかと言うのが整理できないでいます。
Aがダメなの理由としては、そのクラスの内部の記述をする際、特定の型Tが宣言されているならばTでコーディングできるので良いのだが、ワイルドカードの?で宣言されても、?はクラス内部のコーディングで使用できないから、と言うように理解しました。
それでは今まで見てきたList<? extends T>などの記述はどこで使うのか?
また、List<? super T>なども見てきましたが、public class Test<T super String> はなぜいけないのか。
恐らくはジェネリクスに対する理解が中途半端なまま問題集や参考書を読んできてしまったので、上記に整合性が取れないままでいるかと思うのです。
ワイルドカードや下限境界・上限境界などの理解として、「この型を指定した場合は、指定型の継承クラスが扱える」/「この型を指定した場合は、指定型のスーパークラスが扱える」と言う理解まではしているのですが、その「ワイルドカードや下限境界・上限境界」がどこで使用できてどこで使用できないのか、と言う理解が定まりません。
漠然とした内容となってしまい恐縮ですが、どなたかお分かりに為る方がいらっしゃいましたらご教授頂けないでしょうか。
No.2ベストアンサー
- 回答日時:
例えば変数を宣言する時、「型の実引数」として
List<? extends Number> numlist = ・・・・
とすることは OK。
#用語があっているか不明(^^;
こいつには List<Integer>型のリストと代入互換性がある。
List<Number> numlist = ・・・・
では代入できない。
回答ありがとうございます。
No.1で頂いた回答への御礼と併せますと、
Classそのものの中身のコーディングでは使用不可、それ以外では使用できる、と言うところに落ち着きそうですね・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- 法学 不正アクセス禁止法の扱いについて 4 2022/03/23 18:13
- Java java final 1 2022/06/10 22:49
- 就職 ウエディングプランナーって、エリア限定で働けないとこ多すぎません? 大卒で新卒入社を考えていますが、 3 2023/08/24 00:57
- 防犯カメラ・監視カメラ・小型カメラ Windowsのカメラ機能。設定した通りのfpsでの撮影ができず、コマ落ち動画になる。修正するには? 2 2023/01/29 09:50
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- 数学 数的推理の問題です。 この問題の解説に 「選択肢にルートが付く数字はありませんので、CD,ACのいず 2 2022/04/04 11:09
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- 宅地建物取引主任者(宅建) 宅建で同じ問題を繰り返し解いていると問題と正解肢を覚えてしまいますが、それでも続けたら・・・ 2 2022/10/06 20:09
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
ワイルドカード<?>と型パラメータ<T>の違いがすっきりしない。
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
継承したクラス側のクラス名の取得
-
関数内の変数に<summary>コメン...
-
C# インターフェイスの実装
-
c++,ある関数のクラスから別の...
-
構造 他のクラスの構造体を別...
-
回答が分かりません。どなたか...
-
アップキャスト、ダウンキャス...
-
C#で処理中の状況をStatusLabel...
-
Java リフレクションについて
-
Tomcatのpropertiesファイルの...
-
ひとつのファイルにクラスは1つ?
-
JSPでbeanプロパティ(配列)を...
-
範囲外の数値を代入したらエラ...
-
C++ クラス名の前のdefine
-
import と extends について
-
C#のクラスライブラリでメッセ...
-
JTable ArrayList 表示されない
-
オーバーロードしたメンバ関数...
-
実行可能jarファイルのファイル...
-
visual studioのデザイナ画面で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
クラス間でのデータ参照
-
c++,ある関数のクラスから別の...
-
visual studioのデザイナ画面で...
-
C++でfriendクラスにしているの...
-
import と extends について
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
-
Java
-
C#でほかのファイルにある自作...
-
ひとつのファイルにクラスは1つ?
-
継承したクラス側のクラス名の取得
-
C# インターフェイスの実装
-
super.paint(g)を呼び出す意...
-
親クラスから子クラスへアクセス。
-
a href="..." とServlet
-
無名パッケージからのインポート
-
実行可能jarファイルのファイル...
おすすめ情報