我有一个看起来像这样的特征:
trait Processor[+T <: Document] {
def process[D >: T <: Document](doc: D)
}
如果我用process[D >: T](doc: D)
声明process
方法,我无法访问Document
类中的方法。
我不知道为什么我需要在process
方法中重复上限,<: Document
。
所以,有两个问题:
- 这是它应该使用的方式吗?
- 为什么类型系统不自动从特征定义中获取上限。
方法中的上限在 D
上,而不是在T
上。假设你没有设置上限,那么D
可以是T
的任何东西,例如,Any
。所以编译器必须假设D
可以Any
,因此不能给你更多的方法。