当跨性状"sharing"泛型时,该类型参数的逆变误差



我想与类SometimesUsedWithBase 共享在类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出现在type SometimesUsedWithBase.this.Base定义中的值类型someFunction(in:BaseType):BaseType^

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

以下是工作代码:

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
}

相关内容

  • 没有找到相关文章

最新更新