inheritance - Kotlin域类转换为子类

标签 inheritance kotlin

我有一个域名类(class)

@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 cannot be cast to com.example.platform.model.UserFiltered at com.example.platform.controller.UserController.modifyUser(UserController.kt:71) ~[classes/:na]



有没有一种方法可以在Kotlin中实现这一目标,或者我将必须进行完整的转换,在User上设置每个参数?

最佳答案

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

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))

关于inheritance - Kotlin域类转换为子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56329653/

相关文章:

android - 显示来自 firebase 的用户名数据

exception - Kotlin 删除检查异常背后的想法是什么?

swift - ARCore 是否具有 ARKit 的 "guard let planeAnchor"的语义等价物?

java - Kotlin 属性未初始化,但为什么呢?

gradle - IntelliJ Kotlin 多平台项目 Gradle 同步很长

c# - 带有继承的自定义 XML 序列化

c++ - 何时更喜欢基于模板策略的设计而不是基于非模板继承的设计

ruby 继承 vs mixins

inheritance - 从不扩展 Application 的类的 Main 方法启动 JavaFX

sql - Hibernate 的继承