让我们先看看一些代码:
trait Foo[T] {
def fooize(value : T) : Unit
}
object TestFoo {
def testFooForType[T[_] <: Foo[_]](obj : T[Int]) {
obj.fooize(5)
}
}
为什么不进行类型检查,如何克服这个困难呢?我想要做的是测试任何为特定类型Foo
(示例中为T
)实现给定特征Int
的类。
答案 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)
}