Java中设计实体类时一般以继承的方式在基类中存放公共属性和方法
Kotlin中则一般以接口方式来实现
data class实现的接口 接口中成员上的注解可以在data class重写属性时 限制重写属性
import org.bson.types.ObjectId
import org.springframework.data.annotation.*
import java.time.LocalDateTime
import javax.validation.constraints.NotNull
/**
* 基础模型
*
* @property id ID
* @property createdBy 创建者
* @property lastModifiedBy 最后修改者
* @property createdDate 创建日期
* @property lastModifiedDate 最后修改日期
* @property isDeleted 是否已删除
*/
interface Base {
@get:Id
val id: ObjectId?
@get:CreatedBy
val createdBy: String?
@get:LastModifiedBy
val lastModifiedBy: String?
@get:CreatedDate
val createdDate: LocalDateTime?
@get:LastModifiedDate
val lastModifiedDate: LocalDateTime?
@get:NotNull
val isDeleted: Boolean
}
data class A(
override val id: ObjectId? = null,
override val createdBy: String? = null,
override val lastModifiedBy: String? = null,
override val createdDate: LocalDateTime? = null,
override val lastModifiedDate: LocalDateTime? = null,
override val isDeleted: Boolean
) : Base
数据类A中的override属性受到接口Base中相应成员上的注解的限制 可用于Jsr303验证