1. ホーム
  2. generics

[解決済み] Kotlinのジェネリックにおける "*"と "Any "の違いについて

2022-04-26 01:44:56

質問

との違いがよくわかりません。 SomeGeneric<*>SomeGeneric<Any> . と思います。 * は何でも表す(ワイルドカード)、そして Any は、そのオブジェクトを表します。 すべて オブジェクトを継承しています。 つまり、両者は同じであるべきだと思われますが、そうでしょうか?

解決方法は?

を考えてみるとよいかもしれません。 スタープロジェクション は、任意の型ではなく、何が正確かわからない固定的な型を表現するための方法です。

例えば、型 MutableList<*> のリストを表します。 何か (具体的に何を知っているわけではない)。だから、このリストに何かを追加しようとしても、成功しない。のリストかもしれません。 String のリスト、あるいは Int のリスト、あるいは他の何かのリストです。コンパイラは、リストがこの型のオブジェクトを受け入れることを確認できないので、このリストにオブジェクトを入れることは一切許可しません。しかし、もしこのようなリストから要素を取り出そうとすれば、確実に Any? Kotlinではすべてのオブジェクトが Any .

から アスコ 下のコメント

その他 List<*> は任意の型のオブジェクトを含むことができますが、その型は を含むので、文字列を含むことができます(ただし文字列のみ)。 List<Any> は、文字列や整数などをすべて同じリストに含めることができます。