在scala中,Option类声明为
sealed abstract class _Option[+A]
case object _None extends _Option[Nothing] {}
final case class _Some[+A](x: A) extends _Option[A] {}
什么是[+A]
?为什么不只是[A]
?可能是[-A]
以及它意味着什么?
很抱歉,如果它是重复但我在SO上找不到答案。
答案 0 :(得分:6)
它在其泛型参数中声明该类为协变。对于您的示例,如果Option[T]
是Option[S]
的子类型,则表示T
是S
的子类型。因此,例如,Option[String]
是Option[Object]
的子类型,允许您这样做:
val x: Option[String] = Some("a")
val y: Option[Object] = x
相反,如果类声明为-A
,则其泛型参数中的类可以是逆变。
在文档here中阅读上述Scala中的差异。