Scala类声明中[+ A]的含义是什么?

cyr*_*llk 6 types scala

在scala中,Option类被声明为

  sealed abstract class _Option[+A]

  case object _None extends _Option[Nothing] {}

  final case class _Some[+A](x: A) extends _Option[A] {}
Run Code Online (Sandbox Code Playgroud)

什么是[+A]?为什么不[A]呢?可能[-A]是它意味着什么?

对不起,如果它是重复但我找不到答案的SO.

Ben*_*ich 7

它声明该类在其泛型参数中是协变的.对于你的榜样,这意味着Option[T]是一个亚型Option[S],如果T是的亚型S.因此,例如,Option[String]是一个子类型Option[Object],允许您这样做:

val x: Option[String] = Some("a")
val y: Option[Object] = x
Run Code Online (Sandbox Code Playgroud)

相反,如果声明为类,则其泛型参数中的类可以是逆变的-A.

此处的文档中阅读Scala中的上述差异.