scala – case类中的var成员是否会影响case类的相等性?
发布时间:2020-12-16 19:17:03 所属栏目:安全 来源:网络整理
导读:我在代码中大量使用了case类,回复了case类的底层相等定义,以便正确运行.然后我发现我需要将另一个字段成员添加到案例类中. 因此,如果我在case类中添加一个var字段成员,它会弄乱case类的相等属性吗? 如果1为是,那么如果我只更改一次var字段值,那么,在案例类
我在代码中大量使用了case类,回复了case类的底层相等定义,以便正确运行.然后我发现我需要将另一个字段成员添加到案例类中.
>因此,如果我在case类中添加一个var字段成员,它会弄乱case类的相等属性吗? 解决方法
Case类相等只基于它的主要构造函数属性,无论它们是var还是val(是的,你可以通过给出一个显式var来覆盖case类构造函数args所拥有的隐含val来使它们变成var.)在body中添加属性case类的大小不会影响编译器生成的equals(other:Any)方法.
见证人: package rrs.scribble object CCVarEq { case class CC1(i: Int,j: Float,var k: Double) case class CC2(i: Int,var k: Double) { var l = math.Pi } def show { val cc11 = CC1(1,2.0f,3.0) val cc12 = CC1(1,3.0) val cc21 = CC2(1,3.0); cc21.l = math.E val cc22 = CC2(1,3.0) printf("cc11 == cc12: %s%n",cc11 == cc12); cc12.k = math.Pi * math.E printf("cc11 == cc12: %s%n",cc11 == cc12) printf("cc21 == cc22: %s%n",cc21 == cc22) } } 在REPL中: scala> import rrs.scribble.CCVarEq._ import rrs.scribble.CCVarEq._ scala> show cc11 == cc12: true cc11 == cc12: false cc21 == cc22: true 所有关于并发性的杰西的观点也是有效的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |