我是Scala的新手。我正在尝试编写一个抽象类,该类的方法将需要在子类上实现。我想使用泛型来强制该方法采用当前类的参数。

abstract class MySuper{
  def doSomething:(MyInput[thisclass]=>MyResult)
}
class MySub extends MySuper{
  override def doSomething:(MyInput[MySub]=>MyResult)
}

我知道上面的thisclass是无效的,但是我认为它表达了我想说的话。基本上,我想引用实现类。 解决此问题的有效方法是什么?

最佳答案

您可以使用一个巧妙的小技巧来做到这一点:

trait MySuper[A <: MySuper[A]]{
  def doSomething(that: A)
}

class Limited extends MySuper[Limited]{
  def doSomething(that: Limited)
}

还有其他方法,但我发现这种方法可以很好地表达您的需求。

09-26 06:46