在case类上使用toString生成一个值是好还是坏的做法?

时间:2017-04-14 14:24:53

标签: scala

我有case class让我们说:

case class Offset(a:String, b:Int, c: UUID) {
 override def toString: String = productIterator.mkString(",")
}

val offset: String = Offset("some_String", 2, java.util.UUID.randomUUID).toString

对于案例类的override toString方法是否正常,或者我应该实现一个不同的方法,让我们说generateOffset执行相同的操作:

case class Offset(a:String, b:Int, c: UUID) {
  def generateOffset: String = productIterator.mkString(",")
}

val offset: String = Offset("some_String", 2, java.util.UUID.randomUUID).generateOffset

2 个答案:

答案 0 :(得分:7)

人们和调试工具使用

toString。所以它应该包含简洁的人类可读信息。 您不应该将您的逻辑基于toString

第二版更清晰,至少对我而言。

答案 1 :(得分:-1)

这取决于您的案例类使用情况。 覆盖toString方法将为您提供许多好的功能,例如自定义字符串插值:

val offset = Offset("some_String", 2, java.util.UUID.randomUUID)
val str = s"""Offset object is $offset"""

Scala会在引擎盖下调用你的toString方法并将其插入字符串中。

所以总的来说这是个好主意。