斯卡拉:调用从通用特质
问题描述:
的方法时,让我们来看看一些代码第一类型不匹配:斯卡拉:调用从通用特质
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 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)
}
+0
谢谢。我非常关注“T将只是一个扩展Foo特性的类”,我没有想到这一点。 – matb 2014-10-09 20:39:39
我不需要'T'这样在testFooForType'的'身体,你不妨使用'def testFooForType(obj:Foo [Int])'... – sjrd 2014-10-09 11:55:58