有办法在会议室中对实体进行子类处理吗?
我有一辆车entity
@Entity(tableName = "cars")
data class Car(
@PrimaryKey @ColumnInfo(name = "vin") val vin: String,
val manufacturer: String,
val model: String,
val color: String,
val modelYear: Int,
val trim: String = ""
) {
override fun toString() = String.format("%s %s %s %s", modelYear, manufacturer, model, trim)
}但是我想将manufacturer、model和modelYear移动到Vehicle实体中,并让Car继承它。
我尝试用这些字段创建一个Vehicle实体,并使用data class Car : Vehicle,但没有编译。错误是This type is final and cannot be inherited
发布于 2018-08-15 17:53:46
在kotlin中,默认情况下所有类都是最终类。
来自文档
类上的开放注释与Java的final相反:它允许其他人从该类继承。
By default, all classes inKotlin are final,对应于有效的Java,第3版,第19项:继承的设计和文档,否则禁止它。
所以您需要添加open关键字,所以请使用
open class Vehicle(..){...}然后
data class Car(...): Vehicle(..){}边注:如果您试图继承data类,那么您就不能在Kotlin中继承data类,因为数据类中的copy之类的方法是最终的,不能被子类覆盖(在本例中是data类,因此它将自动完成),而且很难实现其他方法,比如当类层次结构随不同的数据成员呈指数增长时,尽管可以通过创建非数据父类或abstract类来避免所有这些冲突。
https://stackoverflow.com/questions/51863737
复制相似问题