为什么kotlin中的data class 被设计成final?

来源:5-8 偏函数

慕田峪8379950

2017-11-04

rt。

写回答

3回答

bennyhuo

2017-11-04

主要是考虑到 data class 的equals 的问题。如果data class 可以被继承,那么就会出现 x.equals(y) == true,y.equals(x) == false  的情形。


关于这个问题,在 scala 当中也有过很多讨论,亲可以参考下 StackOverflow 中的这个回答~What is *so* wrong with case class inheritance?

0
1
慕田峪8379950
未能解惑,如果是继承的子类,自然是要重写equals的,这样子类自然比父类多几个属性,自然是不能相等的啊,如果需要作比较那就需要 显式地强制转换成父类啊。 又衍生出一个疑问 为什么equals传入的值为Any而不是this?类型都不相同为什么可以比较相等? 另外希望能帮我解决下我提出的另一个提问。感激不尽
2017-11-04
共1条回复

慕田峪8379950

提问者

2017-11-04

未能解惑,如果是继承的子类,自然是要重写equals的,这样子类自然比父类多几个属性,自然是不能相等的啊,如果需要作比较那就需要 显式地强制转换成父类啊。
又衍生出一个疑问 为什么equals传入的值为Any而不是this?类型都不相同为什么可以比较相等?

另外希望能帮我解决下我提出的另一个提问。感激不尽。

0
5
慕田峪8379950
回复
bennyhuo
主要还是设计遗留的问题吧?
2017-11-30
共5条回复

慕田峪8379950

提问者

2017-11-04

未能解惑,如果是继承的子类,自然是要重写equals的,这样子类自然比父类多几个属性,自然是不能相等的啊,如果需要作比较那就需要 显式地强制转换成父类啊。
又衍生出一个疑问 为什么equals传入的值为Any而不是this?类型都不相同为什么可以比较相等?

另外希望能帮我解决下我提出的另一个提问。感激不尽。

0
6
bennyhuo
回复
慕田峪8379950
客气啦,有问题可以加群直接聊哈
2017-11-06
共6条回复

Android首选开发语言Kotlin入门与进阶

Google I/O大会钦定Android一级开发语言,现在不学,等待何时

3122 学习 · 387 问题

查看课程