相关疑难解决方法(0)

scala泛型方法重写

我有一个抽象类:

abstract class Foo(...){
   def bar1(f : Foo) : Boolean
   def bar2(f : Foo) : Foo
}
Run Code Online (Sandbox Code Playgroud)

多个类扩展Foo并覆盖方法

class FooImpl(...) extends Foo{
    override def bar1(f : Foo) : Boolean {
        ...
    }
    override def bar2(f : Foo) : Foo {
        ...
    }
} 
Run Code Online (Sandbox Code Playgroud)

有可能,使用泛型(或其他东西)使重写方法具有实现它的子类的参数类型吗?像这样 :

class FooImpl(...) extends Foo{
    override def bar1(f : FooImpl) : Boolean {
        ...
    }
    override def bar2(f : FooImpl) : FooImpl {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在思考下面的内容,但这似乎不起作用......

abstract class Foo(...){
    def bar1[T <: Foo](f : T) …
Run Code Online (Sandbox Code Playgroud)

overriding scala generic-method

19
推荐指数
2
解决办法
2万
查看次数

如何在Scala中限制重写方法中的类型?

trait Rendered
trait TemplateRendered extends Rendered
trait Media {
  def send[T <: Rendered](cooked:T)
}
case class EmailMedia() extends Media {
  override def send(cooked:TemplateRendered) {}  // compile error this line
}
Run Code Online (Sandbox Code Playgroud)

我想要一个带有send()方法的Media模板,该方法接受子类Rendered对象.在具体的类(EmailMedia)中,我想将其锁定到Rendered的特定子类,或者在这种情况下是TemplateRendered.(即使类中的类型比特征中的类型更具限制性/特异性)

我怎样才能做到这一点?

编译器不喜欢这里的尝试.试过这个:

case class EmailMedia() extends Media {
  override def send[T <: TemplateRendered](cooked:T) {}
}
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

5
推荐指数
1
解决办法
219
查看次数