Scala 中的继承组合

composition over inheritance in scala

我创建了一个实际使用继承的代码

任何其他替代方法,如果我想为此使用合成

 case class Test(message:msg)

 abstract class MsgValuetype(value: myString) {
  override def toString = s"${value.value}"
 }

case class msg(id:String) extends MsgValuetype(myString(id))

case class myString(value: String){
    override def toString = s"$value"
 }

下面是我最后一次测试上面的调用。我只希望字符串是 passed.Please 注意实际的 classes 在我的使用中更复杂 case.I 刚刚尝试过以简单的方式获得替代解决方案。

Test(msg("123"))

更新 1

如果我尝试将 MsgValuetype 作为 msg case 的一部分 class 而不是扩展它。

case class Test(message:msg)

case class  MsgValuetype(value: myString) {
  override def toString = s"${value.value}"
 }

 case class msg(id:String,myType:MsgValuetype) 

 case class myString(value: String){
    override def toString = s"$value"
 }

我需要在下面调用初始化

 Test(msg("123",MsgValuetype(myString("123")))) 

我只想拨打

     Test(msg("123"))

也许是这样的?

 case class msg(id: String) { val myType = MsgValuetype(myString(id)) }

您在更新中完成的方式就是要走的路,像这样定义 msg

case class msg(id:String,myType:MsgValuetype) 

您唯一需要添加的是带有重载 apply 方法的 msg 伴随对象

object msg {
  def apply(id : String): msg = msg(id, MsgValuetype(myString(id)))
}

不是你可以创建测试

Test(msg("123"))