首页 文章

覆盖scala中的case类方法

提问于
浏览
-2

我试图覆盖我的case类中的trait方法,它想要显示case类的所有成员 . 我正在使用它进行调试 .

trait A{
   def myMethod(employee:Emp):Unit
}

case class Emp(id:String,name:String) extends A {
   override def myMethod(employee: Emp): Unit = 
              emp.productIterator.toList.foreach(println)
}

其他可行的方法是

emp.productIterator.toList.mkString("\n")

宣布 Emp("10","abc") . 我是 Scala 的新手,不知道如何调用 trait 的覆盖方法 .

  • 我不确定是否有任何其他通用方法来实现此功能以获取案例类成员的字符串形式 .

  • 使用特征和案例类来实现此功能的有效方法 . 我想了解如何实现apply方法和伴随对象 .

  • 我想实现 logging 而不是使用 println . 任何人都可以建议一个教程吗?

1 回答

  • 0

    以前的答案是因为我没有理解你的问题 . 这应该回答你的问题:

    如果您只想将它用于调试目的,您可以像这样使用它:

    trait A{
      def myMethod(employee:Emp):Unit
    }
    
    case class Emp(id:String,name:String) extends A {
      override def myMethod(employee: Emp): Unit =
        this.productIterator.toList.foreach(println)
    }
    
    Emp("1", "2").myMethod(None.orNull)
    

    但更合乎逻辑的是使用此非泛型方法的对象:

    case class Emp(id:String,name:String)
    
    object A{
      def myMethod(employee: Emp):Unit = {
        employee.productIterator.toList.foreach(println)
      }
    }
    
    A.myMethod(Emp("1", "2"))
    

    出于日志记录的目的,您只需使用apache log4j

相关问题