微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

泛型类型参数的下划线在 Scala 中产生编译错误?

如何解决泛型类型参数的下划线在 Scala 中产生编译错误?

我有

trait MyBase[T <: MyBase[T]] {
  def myid: String
}

这么写


case class MyBaseContainer(myBase: MyBase[_])

T 中的 MyBase 产生类型绑定错误

type arguments [_$1] do not conform to trait MyBase's type parameter bounds [T <: Playground.MyBase[T]]

同时写成

case class MyBaseContainer[T <: MyBase[_]](myBase: T)

编译清除任何错误

为什么会这样? MyBaseContainer 的这两个签名在语义上是不是等价的?

是否有一种语法方法可以将类型参数 MyBase 限制为所需的边界,而不将 T 作为类型参数传递给 MyBaseContainer

解决方法

正如 Dmytro Mitin 在评论中提到的,这会起作用:

import scala.language.existentials

case class MyBase[T <: MyBase[T]] (
   myid: String
)


case class MyBaseContainer(myBase: MyBase[T] forSome {type T <: MyBase[T]})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。