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

Scala协变类型声明有上限,为什么方法需要exlplicitly重复上限,scala,generics,types,covariance,Scala,Generics,Types,Covariance,我有一个特点是这样的: trait Processor[+T <: Document] { def process[D >: T <: Document](doc: D) } trait处理器[+T:T:T](doc:D),我无法从文档类访问方法 我不知道为什么我需要重复上界,方法中的上界在D,而不是t。假设你没有设置上限,那么D可以是T也是的任何东西,例如Any。因此,编译器必须假定D可以是任何,因此不能提供更多的方法。在过程[D>:T](doc:D)中,D是T的超类型

我有一个特点是这样的:

trait Processor[+T <: Document] {
  def process[D >: T <: Document](doc: D)
}
trait处理器[+T:T:T](doc:D)
,我无法从
文档
类访问方法


我不知道为什么我需要重复上界,
方法中的上界在
D
,而不是
t
。假设你没有设置上限,那么
D
可以是
T
也是的任何东西,例如
Any
。因此,编译器必须假定
D
可以是
任何
,因此不能提供更多的方法。

过程[D>:T](doc:D)
中,
D
T
的超类型,它是
文档的子类型,因此
D
不一定是
文档。现在我觉得问这个问题很傻。谢谢