簡體   English   中英

Scala:從通用特征調用方法時類型不匹配

[英]Scala: type mismatch when calling a method from generic trait

讓我們先來看一些代碼:

trait Foo[T] {
  def fooize(value : T) : Unit
}
object TestFoo {
  def testFooForType[T[_] <: Foo[_]](obj : T[Int]) {
    obj.fooize(5)
  }
}

為什么不進行類型檢查,如何克服這個困難? 我想要做的是測試針對特定類型T (在示例中為Int )實現給定特征Foo任何類。

T[_] <: Foo[_]表示“ T forSome類型”擴展了“ Foo forSome類型”。

它必須允許類型不同的情況。 (T [A]擴展為Foo [B])

將T與Int類型綁定不會影響Foo的類型,Foo的類型仍然不受限制。

您可以指定Foo的類型:

def testFooForType[T[_] <: Foo[Int]](obj : T[_]) {
    obj.fooize(5)
}

或者您可以使類型關系明確:

def testFooForType[T[V] <: Foo[V]](obj : T[Int]) {
    obj.fooize(5)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM