从案例对象的特征中覆盖方法

我有一个特征和两个案例对象。两个案例对象都具有几乎相同的方法,该方法利用了案例对象中的一种独特方法。我想提取相同的方法并将其放在特征中。我不确定如何使用它作为参数的独特方法来做到这一点。代码示例:

sealed trait Book {}

case object Page extends Book {
def a(): UniqueToPage = println("Page")
def shared(contents: String) = println(s"Something shared and ${a()} and $contents") 
}

case object Cover extends Book {
def b(): UniqueToCover = println("Cover")
def shared(contents: String) = println(s"Something shared and ${b()} and $contents")
}

在我看来,也许我可以对类型转换做一些事情,但是我对从哪里开始感到迷茫。任何建议将不胜感激。请注意,该设计是一个较大项目的一部分,我正在尝试重构此特定部分。

评论
  • 俄对花儿笑
    俄对花儿笑 回复

    尝试

    sealed trait Book {
      type T
      def c(): T
      def shared(contents: String) = println(s"Something shared and ${c()} and $contents")
    }
    
    case object Page extends Book {
      override type T = UniqueToPage
      override def c(): T = println("Page")
    }
    
    case object Cover extends Book {
      override type T = UniqueToCover
      override def c(): T = println("Cover")
    }