繁体   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