人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaの総称型についての質問です。
「StringクラスはObjectクラスのサブクラスである。よってArrayList<String>はArrayList<Object>のサブクラスではないか」と考え、次のようなプログラムを作成しました。

ArrayList<Object> lo = new ArrayList<Object>();
ArrayList<String> ls = new ArrayList<String>();
lo = ls;

しかし、型エラーとなりコンパイルを通すことが出来ませんでした。これはいったい何故でしょうか?

●質問者: zeontex
●カテゴリ:コンピュータ
✍キーワード:ArrayList Java LO Ls object
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● じゃっくそにっく

説明が難しいのですが、(ちょっと修正)

言語上の機能の違いの話で、

総称型(ジェネリクス)クラスは、

普通のクラスとは違う目的を持った機能であり、

ArrayList<Object>, ArrayList<String>

とすることで、通常のクラス表現

Object, String

の「ベースクラス-サブクラス関係」にもたらされる

「代入の親和性」が、それだけで連動して生まれてはならないのです。

なぜなら、

総称型(ジェネリクス)クラス<型指定表現>は、その意味として、

といった役目・機能目的があるからです。

一見普通のクラスと同様に書けば同じ親和効果が得られるように見えるのですが、

<>の中と外では意味が違ってきていっしょくたにすることができません。


2 ● akagi_paon

単純に ArrayList<Object> は Object 型しか受け付けませんので

String を許容するようにしたかったら ArrayList<? extends Object>

というように Object を継承している型を受け付けるということを

明記してあげなければなりません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ