[+A] 在 Scala class 声明中意味着什么?
What does [+A] mean in Scala class declaration?
在 scala 中,选项 class 声明为
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 的答案。
它在其通用参数中声明 class 是 协变的 。对于您的示例,这意味着如果 T
是 S
的子类型,则 Option[T]
是 Option[S]
的子类型。因此,例如,Option[String]
是 Option[Object]
的子类型,允许您执行:
val x: Option[String] = Some("a")
val y: Option[Object] = x
相反,如果 class 被声明为 -A
,则其泛型参数可以 逆变。
阅读文档中 Scala 的上述差异 here。
在 scala 中,选项 class 声明为
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 的答案。
它在其通用参数中声明 class 是 协变的 。对于您的示例,这意味着如果 T
是 S
的子类型,则 Option[T]
是 Option[S]
的子类型。因此,例如,Option[String]
是 Option[Object]
的子类型,允许您执行:
val x: Option[String] = Some("a")
val y: Option[Object] = x
相反,如果 class 被声明为 -A
,则其泛型参数可以 逆变。
阅读文档中 Scala 的上述差异 here。