kotlin - 为什么 @Transient 不能与 val 字段一起使用?
问题描述
我写了数据类
data class FileHeader(
val relativePath: String,
val orderNumber: Long,
val bodySize: Int
) : Serializable {
@Transient
var headerSize: Int = 0
get() = relativePath.length + 8
}
它按我的预期工作。
但是为什么我不能将@Transient 与 val 字段一起使用?
错误是:
此注释不适用于没有支持字段或委托的目标成员属性
以这种方式实施有什么原因吗?
解决方案
注释
默认序列化适用于字段,不关心 getter 方法。因此,如果没有支持字段,则无需序列化(也无需transient
在字节码中标记)。在这种情况下,注释将毫无用处,因此设计人员选择将其设为错误。
如果您不明白为什么没有支持字段:
使用您var
的 ,默认设置器需要支持字段;当您将其更改为 时val
,它不是。
推荐阅读
- php - 从 html 页面调用 phar 中包含的函数
- mongodb - 将旧的 Mongo 数据库引用转换为 DBRefs
- java - 是否可以在编译时以外的运行时进行验证检查?
- google-apps-script - Sharepoint Online 脚本类似于 Google Apps 脚本?
- java - 如何在 JHipster 中为 FeignClient 启用 Autowired?
- geojson - 尝试在 vega 中渲染时,Geojson 会失真
- security - 禁用影响安全通信的 TLS 1.0
- asp.net - 未知页面上传到我的网站
- swift - 从 NSMutableAttributedString 中删除项目符号
- powershell - 根据 ping 所用的时间 ping 服务器和输出