我想在基于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中使用它的任何其他方法吗?
答案 0 :(得分:1)
覆盖equals
以仅比较相等检查和忽略命令所需的字段。
请勿使用ArrayBuffer
代替使用不可变解决方案。
如果要向现有项目实例添加命令,请使用copy
执行此操作
val newProject = project.copy(commands = Command("ls") :: project.commands)
假设命令声明为此case class Command(name: String)
覆盖equals
和hashCode
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
}