斯卡拉:调用从通用特质

问题描述:

的方法时,让我们来看看一些代码第一类型不匹配:斯卡拉:调用从通用特质

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

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

+0

我不需要'T'这样在testFooForType'的'身体,你不妨使用'def testFooForType(obj:Foo [Int])'... – sjrd 2014-10-09 11:55:58

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