scala:案例类以及如何组织

时间:2016-11-04 14:01:11

标签: scala pojo

我想在基于Web的项目中存储打开项目的信息,该项目表示类似CSV的数据。

我有

 case class Project(user:String, sessionId : String, fileOpen : String, commands:ArrayBuffer[Command]) 

问题:具有不同元素变化的命令会影响equals的含义吗?

如果我不希望命令参与equals和hash代码并且不想过度使用这些方法,我可以在类声明后声明命令:

case class Project(user:String, sessionId : String, fileOpen : String) ...{
     val commands:ArrayBuffer[Command]

告诉编译器不要在equals和hascode中使用它的任何其他方法吗?

1 个答案:

答案 0 :(得分:1)

覆盖equals以仅比较相等检查和忽略命令所需的字段。

请勿使用ArrayBuffer代替使用不可变解决方案。

如果要向现有项目实例添加命令,请使用copy执行此操作

val newProject = project.copy(commands = Command("ls") :: project.commands)

假设命令声明为此case class Command(name: String)

覆盖equalshashCode

case class Project(user:String, sessionId : String, fileOpen : String, commands: List[Command]) {
  override def equals(obj: scala.Any): Boolean = obj match {
    case obj: Project => this.user == obj.user && this.sessionId == obj.sessionId && this.fileOpen == obj.fileOpen
    case _ => false
  }
  override def hashCode(): Int = 1013 * user.hashCode + 1009 * sessionId.hashCode + 1003 * fileOpen.hashCode
}