scala:案例类和如何组织
我想将开放项目的信息存储在基于web的项目中,该项目表示类似CSV的数据 我有scala:案例类和如何组织,scala,pojo,Scala,Pojo,我想将开放项目的信息存储在基于web的项目中,该项目表示类似CSV的数据 我有 case class Project(user:String, sessionId : String, fileOpen : String, commands:ArrayBuffer[Command]) 问题:具有不同元素的命令是否会改变,从而影响equals的含义 如果我不希望命令参与equals和hash代码,也不想过度使用这些方法,那么我可以在类声明之后声明命令: case class Project(u
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中使用它的任何其他方法?重写
equals
以仅比较equality check和ignore命令所需的字段
不要使用ArrayBuffer
而是使用不可变的解决方案
如果要将命令添加到现有项目实例,请使用copy
来执行此操作
val newProject = project.copy(commands = Command("ls") :: project.commands)
假设命令是这样声明的case类命令(名称:String)
重写等于
和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
}