2
我期待在行动书Scala和它有这个代码斯卡拉协方差与下界
sealed abstract class Maybe[+A] {
def isEmpty: Boolean
def get: A
def getOrElse[B >: A](default: B): B = {
if(isEmpty) default else get
}
}
final case class Just[A](value: A) extends Maybe[A] {
def isEmpty = false
def get = value
}
case object Nil extends Maybe[scala.Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("Nil.get")
}
如果getOrElse的签名被定义为 高清getOrElse(默认:A):A = 它不编译。
笔者状态 “下界B>:一个声明的类型参数B被限制在一些超级型A型”
然而,我似乎能够做到这一点,它的工作原理
val j1 = Just(1)
val l1 = j1.getOrElse("fdsf") //l1 : Any = 1
是String超类型的Int?我不明白为什么这会起作用?它就像它回落到参数1是类型为Any的类型(它是)而不是类型Int。