Scala对象同伴和特征的问题。

我试图在scala中做一些类似的事情,让Category类通过参数来接收它的属性,但我得到以下错误。

object creation impossible, since method apply in trait ModelCompanion of type => asd.Category is not defined
  object Category extends ModelCompanion[Category] {
         ^
one error found

代码在这里。

object asd {

  trait ModelCompanion[M <: Model[M]] {
    def apply: M
  }

  trait Model[M <: Model[M]] {
    var id: Int = 0
  }

  object Category extends ModelCompanion[Category] {
    def apply(name: String): Category = new Category(name)
  }

  class Category(var name: String) extends Model[Category] {
  // Do something with name
  }

}

我是Scala的新手,如果你能给我一些指导,我将非常感激。

解决方案:

ModelCompanion 中定义了一个抽象方法 apply 没有任何参数(或参数列表)。在 Category 您定义了一个 apply 方法,该方法的参数类型为 String. 这不是抽象方法的实现,因为它不接受相同数量和类型的参数。因此 Category 没有提供一个适当的定义 ModelCompanion的抽象 apply 方法,因此不能被实例化。

根据你想要的行为,你应该更改 ModelCompanion.applydef apply(name: String): M 或引入另一个类型参数,并将其作为参数类型。

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/40705.html

(0)
上一篇 14小时前
下一篇 13小时前

相关推荐

发表评论

登录后才能评论