首页 > 解决方案 > Kotlin 域类转换为子类

问题描述

我有一个域类

@Entity
@Table(name = "user")
open class User(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    open var id: Long = 0L,

    @Column(nullable = false)
    var name: String? = null)

我有这个域类的子类,我想添加一个 JsonIgnore 注释:

open class UserFiltered(
    @Id
    @JsonIgnore
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    override var id: Long = 0L
): User()

但是当我尝试将用户强制转换为 UserFiltered 时:

return ResponseModel<UserFiltered>(true, userModified as UserFiltered)

我收到以下错误:

java.lang.ClassCastException: com.example.platform.database.domain.User 无法在 com.example.platform.controller.UserController.modifyUser(UserController.kt:71) 处转换​​为 com.example.platform.model.UserFiltered ~ [类/:na]

有没有办法在 Kotlin 中实现这一点,或者我必须做完整的演员,在用户上设置每个参数?

标签: inheritancekotlin

解决方案


我不得不将子类修改为以下形式:

open class UserFiltered(
    @Id
    @JsonIgnore
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    override var id: Long = 0L
): User(){
    constructor(user: User): this(user.id)
}

并创建 UserFiltered 的实例

return ResponseModel<UserFiltered>(true, UserFiltered(userModified))

推荐阅读