2017-08-08 82 views
-2

我想重写我的case类中想要显示case类的所有成员的trait方法。我正在使用它进行调试。重写scala中的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的覆盖方法。

  1. 我不知道是否有任何其他通用的方法来实现这一功能 拿到案例类成员的字符串形式。

  2. 使用特征和案例类的高效方式来实现这个功能。我想了解如何应用方法和伴侣 对象可以实现。

  3. 我想执行logging而不是使用println。任何人都可以 为它提供一个教程吗?
+0

为什么不在'trait'中实现? – cchantep

+0

不错的建议,如果我们在特征中做到这一点,我们需要覆盖案例类,因为它扩展了 – coder25

+0

不需要。此外,由于'myMethod'是无状态的(不涉及“A”实例的状态),宁愿在伴侣'object'中实现它。 – cchantep

回答

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