inheritance - 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 中实现这一点,或者我必须做完整的演员,在用户上设置每个参数?
解决方案
我不得不将子类修改为以下形式:
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))
推荐阅读
- c - 在 dsPIC33 中从 C 调用的汇编函数中如何解释返回值?
- javascript - Express 没有得到其他查询 Mongodb 的函数的返回
- java - 如何在后台仅在功能文件中运行一次 java 类
- mongodb - 自动缩放 Mongodb 作为 Microsoft Azure 上的服务
- google-ads-api - 广告脚本:在没有任何修改的情况下创建关键字 CONCURRENT_MODIFICATION 时出错
- javascript - mongoose $aggregate $lookup 不返回数据
- docker - Docker - 使用多台机器和日志驱动程序 json 文件进行集中日志记录的最简单方法?
- c# - ASP.NET Webform:在代码隐藏上获取选定复选框的值
- c# - 如何计算连续的 MD5 哈希?
- apache-spark - 如何在批处理模式下使用 spark 从 kafka 主题加载所有记录