Kotlin 为什么@Transient可以';不能与val字段一起使用?

Kotlin 为什么@Transient可以';不能与val字段一起使用?,kotlin,Kotlin,我编写了数据类 data class FileHeader( val relativePath: String, val orderNumber: Long, val bodySize: Int ) : Serializable { @Transient var headerSize: Int = 0 get() = relativePath.length + 8 } 正如我所预料的那样 但是为什么我不能在val字段中使用@Transient 错误是: 此批注不

我编写了数据类

data class FileHeader(
    val relativePath: String,
    val orderNumber: Long,
    val bodySize: Int
) : Serializable {
@Transient
var headerSize: Int = 0
    get() = relativePath.length + 8
}
正如我所预料的那样

但是为什么我不能在val字段中使用@Transient

错误是:

此批注不适用于没有支持字段或委托的目标成员属性

有什么原因可以这样实现吗?

注释

默认序列化在字段上工作,不关心getter方法。所以,如果没有支持字段,就没有要序列化的内容(也没有要在字节码中标记为
瞬态的内容)。在这种情况下,注释将是无用的,因此设计者选择将其设置为错误

如果您不明白为什么没有支持字段:


对于您的
var
,默认设置程序需要支持字段;当您将其更改为
val
时,它不是。

您使用的是哪个版本的Kotlin?我在1.3.21中尝试了这个,它似乎起了作用。@AlexanderEgger我得到了错误,正如预期的那样。可能您没有将
var
更改为
val
?版本为1.3.20