2017-08-08 77 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