Class 为什么使用Kotlin修饰符';打开';与'不兼容;数据';?
我有一门课:Class 为什么使用Kotlin修饰符';打开';与'不兼容;数据';?,class,inheritance,kotlin,Class,Inheritance,Kotlin,我有一门课: open data class Person(var name: String) 另一类: data class Student(var reg: String) : Person("") 这给了我一个错误: 错误:修饰符“打开”与“数据”不兼容 如果我从Person类中删除数据,就可以了 为什么kotlin打开且数据不兼容?来自: 为确保生成代码的一致性和有意义的行为,数据类必须满足以下要求: 主构造函数需要至少有一个参数 所有主构造函数参数都需要标记为val或var 数据
open data class Person(var name: String)
另一类:
data class Student(var reg: String) : Person("")
这给了我一个错误:
错误:修饰符“打开”与“数据”不兼容
如果我从Person
类中删除数据,就可以了
为什么kotlin打开且数据不兼容?来自:
为确保生成代码的一致性和有意义的行为,数据类必须满足以下要求:
- 主构造函数需要至少有一个参数李>
- 所有主构造函数参数都需要标记为val或var李>
- 数据类不能是抽象的、开放的、密封的或内部的李>
- (1.1之前)数据类只能实现接口
等于
,哈希代码
,复制
,到字符串
,组件
函数)。这样的代码不能被程序员破坏。因此,数据类有一些限制 作为州政府
- 数据类不能是抽象的、开放的、密封的或内部的李>
等于
,哈希代码
,等等)的工作方式不明确。请参阅中关于此的进一步讨论
自那以后,对数据类的限制被稍微取消了:它们现在可以从其他类继承,相关的。然而,它们仍然不能从自身继承
请注意,数据类“仅”提供了自动
equals
、hashcode
、toString
、组件
和复制
功能的额外便利。如果您不需要这些,那么像下面这样的类仍然具有带有getter/setter的属性和一个非常简单的构造函数,并且对如何将其用于继承没有任何限制:
class User(val name: String, var age: Int)