采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
rt。
主要是考虑到 data class 的equals 的问题。如果data class 可以被继承,那么就会出现 x.equals(y) == true,y.equals(x) == false 的情形。
关于这个问题,在 scala 当中也有过很多讨论,亲可以参考下 StackOverflow 中的这个回答~What is *so* wrong with case class inheritance?
未能解惑,如果是继承的子类,自然是要重写equals的,这样子类自然比父类多几个属性,自然是不能相等的啊,如果需要作比较那就需要 显式地强制转换成父类啊。 又衍生出一个疑问 为什么equals传入的值为Any而不是this?类型都不相同为什么可以比较相等? 另外希望能帮我解决下我提出的另一个提问。感激不尽
未能解惑,如果是继承的子类,自然是要重写equals的,这样子类自然比父类多几个属性,自然是不能相等的啊,如果需要作比较那就需要 显式地强制转换成父类啊。 又衍生出一个疑问 为什么equals传入的值为Any而不是this?类型都不相同为什么可以比较相等?
另外希望能帮我解决下我提出的另一个提问。感激不尽。
在比较前很可能你不知道它是啥类型,你就不让人家比较了吗? 另外,父类引用指向子类实例的事情很常有,导致相等性无法传递和对称的事情会给使用者带来很大的麻烦。
我的想法是,既然在代码中需要去比较两个值了,那首先应该先把这2个值转为同一类型。如果不知道类型,那么在转换是就会报错。 我在源码中发现equals本来就是在比较同一对象后使用 as 强转,再比较具体的属性。使用this传值也不会在使用时增加很多代码量,仅仅多个as转换类型。不同类型强转在这里报错与在euqals内报错不都差不多吗,在外部实现还可以有更多的方案。 我知道既然设计为Any那必然是有其道理的。只是我不能理解罢了。 望老师指点迷津。
嗯,能够理解了,是什么形式其实并不重要。
你还提了啥问题。。没找着呀。。
那是重复的,我不会删除评论。。.
是还有一个问题, 我想知道java中序列化对象传递的是什么,仅仅是对象的属性吗( 坐标 例子中的两个Double值按照特殊的规定排列,就像json一样)
登录后可查看更多问答,登录/注册
Google I/O大会钦定Android一级开发语言,现在不学,等待何时
1.4k 3
1.1k 1
1.0k 15
1.3k 15
1.5k 14