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

时间:2015-04-02 12:21:31

标签: scala types

在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上找不到答案。

1 个答案:

答案 0 :(得分:6)

它在其泛型参数中声明该类为协变。对于您的示例,如果Option[T]Option[S]的子类型,则表示TS的子类型。因此,例如,Option[String]Option[Object]的子类型,允许您这样做:

val x: Option[String] = Some("a")
val y: Option[Object] = x

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

在文档here中阅读上述Scala中的差异。