当跨特征“共享”泛型时,该类型参数的逆变误差

时间:2016-05-05 16:56:41

标签: scala generics types covariance

我想与类OutsideUsedWithBase

共享Base类中定义的类型
trait Base[A] {
  type BaseType = A
}

trait SometimesUsedWithBase {
  this: Base[_] =>
  def someFunction(in: BaseType): BaseType
}

class StringThing extends Base[String] with SometimesUsedWithBase {
  def someFunction(in: String): String = "" + in
}

此解决方案正常工作,直到我将参数添加到BaseType类型的someFunction。 (所以如果你删除参数,代码工作正常)。现在我收到了这个错误:

  

错误:(7,21)协变类型_ $ 1出现在逆变位置   在def中键入CertainUsedWithBase.this.BaseType值   someFunction(in:BaseType):BaseType                      ^

我有什么想法可以完成我想做的事情?

1 个答案:

答案 0 :(得分:1)

这是工作代码:

trait Base {
  type BaseType
}

trait SometimesUsedWithBase { this: Base =>
  def someFunction(in: BaseType): BaseType
}

class StringThing extends Base with SometimesUsedWithBase {
  type BaseType = String

  def someFunction(in: String): String = "" + in
}

我认为你不应该同时使用泛型类型参数并将其分配给一个类型,你有两次相同的信息。

要使用泛型,你需要设置你不想要的类型,但它也可以编译

trait Base[A]

trait SometimesUsedWithBase[A] { this: Base[A] =>
  def someFunction(in: A): A
}

class StringThing extends Base[String] with SometimesUsedWithBase[String] {
  def someFunction(in: String): String = "" + in
}