override case class method in scala

亡梦爱人 提交于 2019-12-13 09:03:16

问题


I am trying to override a method of trait in my case class which want to display all the members of case class. I am using it for debugging purpose.

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)
}

other possible way to do this is

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

to declare Emp("10","abc"). I am new to Scala, not sure how to call the override method of trait.

  1. I am not sure if any other generic way to achieve this functionality to get string form of case class members.

  2. Efficient way to use trait and case class to achieve this functionality.I want to understand how apply method and companion objects can be implemented .

  3. I want to implement logging instead of using println. Can anyone suggest a tutorial for it?

回答1:


Previous answer was because i didn't understood your question right. This should answer your question:

If you want this only for debugging purposes you can use it like that:

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)

But more logical would be to use object with this nonGeneric method:

case class Emp(id:String,name:String)

object A{
  def myMethod(employee: Emp):Unit = {
    employee.productIterator.toList.foreach(println)
  }
}

A.myMethod(Emp("1", "2"))

For logging purposes you can use just apache log4j



来源:https://stackoverflow.com/questions/45566851/override-case-class-method-in-scala

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!