У меня есть следующее определение функции в Скале:Почему Scala не распознает тип Null в качестве подтипа T в выводе параметра типа универсальной функции?
trait GenExtractor[+R] P
def orElseExtractor[R2<: Super, Super>: R](g: GenExtractor[T, R2]): GenExtractor[T, Super] =
new OrElse[T, Super](this, g)
}
, который должен объединить 2 GenExtractors:
GenExtractor[A]
GenExtractor[B]
в:
GenExtractor[C]
где С является общим супертипом А и В
Однако, когда я пытаюсь вызвать эту функцию п:
val genExtractor = new GenExtractor[R](...parameters...)
val combined = genExtractor.orElseExtractor[Null, R] {
_: FetchedRow => null
}
Я получил следующее сообщение об ошибке:
Error:(84, 47) type arguments [Null,R] do not conform to method orElseExtractor's type parameter bounds [R2 <: Super,Super >: R]
def orNull: Extractor[R] = orElseExtractor[Null, R] {
^
Это явно ложный сигнал тревоги, так как в этом случае:
type R2 = Null
type Super = R
которые удовлетворяют условию: Null <: R & R>: R
Почему компилятор scala дал мне эту ошибку? Что мне делать, чтобы исправить это?