代码之家  ›  专栏  ›  技术社区  ›  B. Bal

在Scala中重用类成员

  •  0
  • B. Bal  · 技术社区  · 2 年前

    我在Scala中有两个案例类,如下所示:

    case class CaseClass(
                                               commonAttribute1: Int,
                                               commonAttribute2: String,
                                               commonAttribute3: String,
                                               commonAttribute4: String,
                                               commonAttribute5: String,
                                               .
                                               .
                                               .
                                             )
                                            
    case class CaseClassDuplicate(
                                               commonAttribute1: Int,
                                               commonAttribute2: String,
                                               commonAttribute3: String,
                                               commonAttribute4: String,
                                               commonAttribute5: String,
                                               .
                                               .
                                               .
                                               particularAttribute1: Timestamp,
                                               particularAttribute2: Long
                                               
                                             )
    

    有没有一种方法可以创建一个公共类,以便在声明复制类时编写如下内容:CaseClassDuplicate(SpecialAttribute1:Timestamp,SpecialAttribute2:Long),而不是重新编写所有成员?谢谢

    0 回复  |  直到 2 年前
        1
  •  1
  •   Zvi Mints    2 年前

    您可以尝试以下两种解决方案:

    case class CaseClassDuplicate(
                                   common: CaseClass,
                                   particularAttribute1: Timestamp,
                                   particularAttribute2: Long)
    

    trait AbstractCommonClass {
      val commonAttribute1: Int
      val commonAttribute2: String
      val commonAttribute3: String
      val commonAttribute4: String
      val commonAttribute5: String
    }
    trait AbstractPractical {
      val particularAttribute1: Timestamp
      val particularAttribute2: Long
    }
    
    case class ConcreteClass() extends AbstractCommonClass with AbstractPractical 
    

    并在上实现所有变量 ConcreteClass .

    这完全取决于你的用法,分享更多细节以获得更具体的答案