在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.
它声明该类在其泛型参数中是协变的.对于你的榜样,这意味着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中的上述差异.