У меня есть черта с функцией сравнения размеров, которую я хочу реализовать в подклассе:
trait A {
def isLessThan(that: A): Boolean
...
}
class SubOfA() extends A {
...
override def isLessThan(that: SubOfA): Boolean = {
this.size < that.size
}
...
}
Однако метод не является корректным переопределением, поскольку тип аргумента SubOfA
а не A
.
Я также пытался сделать тип аргумента this.type
, но затем, когда я вызываю метод из абстрактной установки, я не могу использовать объект типаA
в качестве аргумента:
...
(foo: A, bar: A) => foo.isLessThan(bar)
Это ожидало бы тип foo.type
, а не A
, которые одинаковы, но я не думаю, что компилятор еще знает об этом.
Есть идеи, как я мог заставить что-то подобное работать?Я искал повсюду, чтобы найти ответ на этот вопрос, но ничего не могу найти.Может быть, я не знаю, какой правильный вопрос задать.