我有一个特点,就是我想在子类中实现一个大小比较函数:
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
它们是一样的,但我认为编译器还不知道。
有没有办法让这样的事情发生?我找遍了所有地方想找到答案,但什么也找不到。也许我不知道该问什么问题。
2条答案
按热度按时间nmpmafwu1#
可以使用以下方法修复第一种方法:
bgtovc5b2#
你可以用
F-Bounded
多态性(java上的解决方案是什么),或者Typeclasses
多态性(这将是haskell的解决方案)。我个人的偏好是使用typeclass,因为它更具可扩展性、可维护性和类型安全性——下面是robnorris所作的更客观的比较。
f-有界。
类型类。