带有上限的 Scala 协变类型声明,为什么方法需要重复上限



我有一个看起来像这样的特征:

trait Processor[+T <: Document] {
  def process[D >: T <: Document](doc: D)
}

如果我用process[D >: T](doc: D)声明process方法,我无法访问Document类中的方法。

我不知道为什么我需要在process方法中重复上限,<: Document

所以,有两个问题:

  1. 这是它应该使用的方式吗?
  2. 为什么类型系统不自动从特征定义中获取上限。

方法中的上限在 D 上,而不是在T上。假设你没有设置上限,那么D可以是T的任何东西,例如,Any。所以编译器必须假设D可以Any,因此不能给你更多的方法。

相关内容

  • 没有找到相关文章

最新更新