Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala:案例类和如何组织_Scala_Pojo - Fatal编程技术网

scala:案例类和如何组织

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

我想将开放项目的信息存储在基于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中使用它的任何其他方法?

重写
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
}