trait SomeClass {
...
}
trait AnotherClass[+V <: SomeClass] {
...
}
trait SomeAnotherClass[+V <: SomeClass] {
protected def someFunc[W >: V](anotherClass: AnotherClass[W]) = {
...
}
}
我收到此错误:
type arguments [W] do not conform to trait AnotherClass's type parameter bounds [+V <: SomeClass]
[error] protected def someFunc[W >: V](anotherClass: AnotherClass[W]) = ...
[error] ^
[error] one error found
当我执行[W >: V <: SomeClass]
而不是[W >: V]
时,我不会收到错误,但在这种情况下,它会隐藏变量。请帮忙,如何解决这个问题。
更新
protected def someFunc(anotherClass: AnotherClass[V]) = {
...
}
我收到错误covariant type V occurs in contravariant position in type
答案 0 :(得分:2)
当您说W >: V
时,您说W
的类型参数someFunc
必须具有V
的较低类型范围。这意味着W
可以是V
或其任何超类型,这将打破V <: SomeClass
的类型范围。
例如Any >: SomeClass
,因此在此假设情境中W
可能是Any
,但Any = V <: SomeClass
也不是真的,因此类型边界会中断。
当您说W >: V <: SomeClass
时,W
的下限为V
,上限为SomeClass
。 SomeClass
W
的上限非常重要,因为AnotherClass
的包含类型的上限为SomeClass
。如果没有它,它会尝试允许AnotherClass[Any]
(或其他一些非SomeClass
的超类型,当然它不能。
你怎么解决这个问题?你有选择一种方法来做到这一点。您不能同时拥有W >: V
和AnotherClass[+V <: SomeClass]
。它只是不起作用,因为类型边界冲突。