![](/img/trans.png)
[英]Confusing Scala type mismatch error with 'uncheckedVariance' in signature
[英]Scala type constraints confusing error
這段代碼:
trait Base[+K <: Option[Int]] {
val a: K = None
}
class GuaranteedA extends Base[Some[Int]] {
override val a = Some(1)
}
產生一個錯誤:
<console>:8: error: type mismatch;
found : None.type
required: K
val a: K = None
但為什么? K
的類型約束說K
必須是Option[Int]
的子類型, None
是,即使我嘗試val a: K = Some(0)
Base
val a: K = Some(0)
,也會產生相同的錯誤。
我對這種行為非常困惑,不知道為什么會發生這種情況,也許您可以幫我嗎?
trait Base[K <: Option[Int]]
只是說:有一個類型K
是Option[Int]
子類型。 你的第二個部分GaranteedA
正好說明了為什么你的Base
定義不能假裝None
是的亞型K
-imagine,你沒有覆蓋val a
。 您最終將獲得值None
轉換為Some
。
正因為K
是一個亞型Option[Int]
和None
是的子類型Option[Int]
並不能保證None
是的亞型K
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.