1

コード:

List<? extends Integer> ints= new ArrayList<Integer>();
ints.add(3);//error

私はまだそれがどのように機能するのか理解していません。質問:

とはどういう意味CAP#1ですか? 参照型ですか?CAP#1 は から継承されていないため、いいえ、と思いますObject。書き込みができints.add(null);//OK、コンパイル時のエラーはありません。しかし、私たちは書くことができませんnull instanceof CAP#1;//compile-time error。インスタンス化できない理由CAP#1:

CAP#1 c= new CAP#1();

CAP#1が表示されますか?

4

2 に答える 2

5

CAP#1' ' で表される暗黙の型変数のコンパイラ名です?。そのような名前付きの型はありませんが、コンパイラはその作業を完了するために型のプレースホルダーを作成する必要があります。名前は「キャプチャ」の略です。

G<? extends T>のように精神的に型を書き直すのに役立ちます∃CAP#1 extends T: G< CAP#1 >

ワイルドカードが何を表しているのかわからないため、ワイルドカード extends タイプを使用してリストに何も追加することはできません。Snakeaに a を追加できないのと同じように、 aに追加することList< Mammal >はできません。List< ? extends Animal >?Mammal

ただし、は実質的にすべての参照型のメンバーであり、が表す可能性のあるものはすべて必然的に含まれるnullため、この状況ではいつでも追加できます。null?

私はよく、Java がList< ? extends F >一部の最終的な型FList< F >. おそらく、それF自体が一般的なワイルドカード型である可能性があるためです。これは、任意に多くのサブタイプがまだあることを意味します。

Angelika Langer の有名な Java ジェネリックに関する FAQ とは別に、私はそれらに関するいくつかのことを自分のリストにまとめています。

于 2013-10-11T06:52:58.903 に答える
2

Number または未知のサブクラスを意味します。そのような値を取得すると数値になりますが、どちらが有効か分からないため、この型の値を与えることはできません。

詳細については、この回答に従ってください: List<Number>とList<の違いは何ですか? Number> を拡張しますか?

于 2013-10-11T06:47:46.233 に答える