:誰でも違いが何であるかを説明してもらえますSeq[Any]
とSeq[_ <: Any]
?
私の目には、すべてが拡張されるので、両方の場合にすべてを置くことができますAny
。
Seq[Any]
のサブタイプでSeq[_ <: Any]
ある_
可能性があるためAny
です。
Seq[_ <: Any]
のサブタイプです。Seq[Any]
代わりに入力したものはすべて_
、のサブタイプを取得するためですSeq[Any]
。
Seq
不変条件F
(例Set
)に置き換えるSet[Any]
と、はのサブタイプになりますSet[_ <: Any]
が、その逆はありません。Set[_ <: Any]
共通のスーパータイプがありSet[Any]
、Set[String]
、Set[Int]
など
さらに詳細に:
Set[_ <: Any]
の省略形ですSet[T] forSome { T <: Any }
。
Set[T] forSome { T <: Any }
すべてのスーパータイプであるSet[T]
タイプに対してT
満足しますT <: Any
。仕様によると
実存型で示される値のセット
T forSome {Q}
は、そのすべての型インスタンスの値のセットの和集合です。
しかし、それは同じことです。
したがって、次のようなコード
val set1: Set[String] = ???
val set2: Set[_ <: Any] = set1
コンパイルされます(試してみてください!)。そしてString
、他のタイプ(タイプで_ <: ...
はない)に置き換えても、それでも可能です。だが
val set1: Set[String] = ???
val set2: Set[Any] = set1
しません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加