Scala:从通用特征调用方法时类型不匹配

时间:2014-10-09 10:49:09

标签: scala generics

让我们先看看一些代码:

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

为什么不进行类型检查,如何克服这个困难呢?我想要做的是测试任何为特定类型Foo(示例中为T)实现给定特征Int的类。

1 个答案:

答案 0 :(得分:2)

T[_] <: Foo[_] 表示“T forSome type”扩展“Foo forSome type”。

必须允许类型不同的情况。 (T [A]扩展了Foo [B])

使用Int类型绑定T对Foo的类型没有影响,它仍然是无限制的。

您可以指定Foo的类型:

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

或者您可以明确表达类型关系:

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