15

ジェネリックの裁判によると、

このセクションには次のように記載されています。

2つの具象型AとB(たとえば、数値と整数)が与えられた場合、AとBが関連しているかどうかに関係なく、とはMyClass<A>関係がありません。およびMyClass<B>の共通の親はObjectです。MyClass<A>MyClass<B>

しかし、ここで私たちは言われています、

整数は数値のサブタイプですが、のサブタイプでList<Integer>はなく、List<Number>実際、これら2つのタイプは関連していません。List<Number>との共通の親List<Integer>はですList<?>

最初の例でMyClass<A>/の親がないのはなぜですか?違いは何ですか?MyClass<B>MyClass<?>

4

3 に答える 3

6

答えはささいなことだと思います。MyClass<A>との正しい親MyClass<B> 確かにですMyClass<?>が、ワイルドカードがまだ導入されていないため、チュートリアルでは少し簡略化しています。

言うことのポイント

MyClass<A>との共通の親MyClass<B>はですObject

Aとの関係に関係なく、2つのタイプのいずれも他方の親ではないことを明確にするためだけでしたB

これは、最初の見積もりの​​すぐ下にある次のコメントによって確認されます。

タイプパラメータが関連しているときに2つのジェネリッククラス間にサブタイプのような関係を作成する方法については、ワイルドカードとサブタイピングを参照してください。

ワイルドカードとサブタイピングの章の紹介と同様に:

Generics、Inheritance、およびSubtypesで説明されているように、ジェネリッククラスまたはインターフェイスは、それらのタイプ間に関係があるという理由だけで関連しているわけではありません。ただし、ワイルドカードを使用して、ジェネリッククラスまたはインターフェイス間の関係を作成できます。

于 2012-10-29T12:30:03.993 に答える
4

チュートリアルの最初の引用の直後に、次のように表示されます。

タイプパラメータが関連しているときに2つのジェネリッククラス間にサブタイプのような関係を作成する方法については、ワイルドカードとサブタイピングを参照してください。

これは2番目の見積もりへのリンクです。

ですから、誤解を招きやすく、言葉遣いもあまりよくないと思いますが、最初のものを次のように読みます。

次のリンクで説明されているワイルドカード/サブタイピングを実行する機能がなかった場合、MyClassとMyClassの共通の親はObjectになります。

于 2012-10-29T12:29:14.100 に答える
1

パラメータ化されたタイプの単一の「親」について話すことは、実際には役に立ちません。重要なのは、一方が他方のスーパータイプであるかどうかです。確かに、Objectはとの一般的なスーパータイプでMyClass<A>ありMyClass<B>、もそうですMyClass<?>。AとBが整数と数値の場合、これMyClass<? extends Number>も一般的なスーパータイプです。ですMyClass<? extends Serializable>

于 2012-10-29T20:04:55.560 に答える