QA@IT

SJCP(OCJ-P)の問題で、ジェネリクスに関して。「is-a関係にあるものを選択肢から選びなさい」

2357 PV

資格試験の問題で、意味がわからない問題がありまして、質問させてもらいます。

問題文:
is-a関係にあるものを選択肢から選びなさい。

class A{}
class B extends A{}

正解の選択肢(3つ):

  • List<? extends A> = new ArrayList<A>();
  • List<? super B> = new ArrayList<A>();
  • List<A> = new ArrayList<A>();

間違いの選択肢(5つ):

  • List<? super A> = new ArrayList<B>();
  • List<Object> = new ArrayList<B>();
  • List<A> = new ArrayList<? extends A>();
  • List<B> = new ArrayList<A>();
  • List<A> = new ArrayList<? super B>();

まず疑問なのですが、こんな文法はあるのですか?変数の宣言とも違うし、こんな書き方見たことないです。

次に、「List = new ArrayList();」はis-aの関係なのですか?なぜなのでしょう?

さっぱり解らないです。これ、ジェネリクスの構文なんですか?開発では普通に使ってるんですが、言いたいことがさっぱり解らないです。

回答

インスタンス変数名がないからおかしいという意味なら、その認識で正しいと思います。

List<? extends A> a = new ArrayList();
List<? super B> b = new ArrayList();

List c = new ArrayList();

なんだと思います。

参考までにどこで見たものですか?参考書ですか?試験会場ですか?ネットですか?

編集 履歴 (0)
  • Androidアプリです。
    株式会社ウィズツーワンという会社が出しているアプリで、このURLになります。
    https://play.google.com/store/apps/details?id=com.with21.laa.javasjcp.jp

    ちょっとこの問題についてもメールで問い合わせてみますね。
    -
  • このアプリはレビューどおり誤字脱字がひどいですよ。【速攻で払戻し対象】/総称がタグと認識されて正常に表示されていないため
    ちょっと正常に回答いたしかねます。

    -
  • 会社の方に問い合わせたのですが、近いうちに修正版をリリースしてもらえるようです。
    それを待ってからもう一度見てみます。
    -
  • 今回の件とは関係ないですが昔購入したら私の端末では動かなくて払い戻してもらった事があります。そういう対応は早かった気はします。しかしGenericsがタグって・・・あんまり確認してないんですかね・・・。なにかから自動コンバートでもしてるのかな -
  • lied_onion さむ。総称がタグと認識されて消えてるは質問者のものからですよ。[ List = new ArrayList(); ]が3つあるので消えていることは確か。 -
  • 間違いのほうの一覧あんまり見てませんでした。たしかにそうですね。残ってるのがあるのが不思議ではありますが・・・。(ちなみに「あんまり確認してないんですかね」はアプリをつくってる会社へのコメントです、念のため) -
  • すみません、私こそが「あんまし確認してない」でした・・・。
    不等号の記号をエスケープし忘れてて、これでは問題の意味がわからなかったと思います。ごめんなさい。

    それと、この会社にメールで問い合わせたのですが、近々修正してくださるそうです。今はクラスの章から修正しているようです。
    -
  • そうだったんですね。ところでListとArrayListはインターフェースだからhas-aではなくis-aだというのはいいんですよね?<文法がおかしいから意味が分からないだけと捉えてますが。 -
  • すみません、is-aの関係って、「サブクラスはスーパークラスの一種である」みたいな関係ですよね?
    だから、ArrayListはListの一種である、ArrayList is-a List だと認識しているんですが、あっているのでしょうか?
    -
  • Listはインターフェースですが、そういう事です。「インターフェースでもis-aだというのは意味的にどうか」という議論もあるみたいですけど、ここでは文法的に代入してそれ(List)として使えるからis-aだという意味でよいかと思います。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。