ID
唯一标识 ID.
一个 ID,其代表了两种数据:ID的类型,以及ID具体的值。
假若一个 ID 中实际存储的值仅有一个,则它的 toString 应当就是它的字面值。 通常情况下 ID 之间的相等判断即通过字面值进行。
序列化
ID 应当支持序列化, 且 ID 的序列化器应当都是一个 primitive
序列化器。 所有的 ID 序列化后都不应是结构体, 而是一个原始类型值。
例如:
@Serializable
data class User(val id: LongID, val name: String)
val json = Json.encodeToString(User(213L.ID, "ForteScarlet"))
// json: {"id": 213, "name": "ForteScarlet"}
Content copied to clipboard
鉴于 ID 的最终序列化结果为原始类型,并且是非封闭性的, 因此在序列化是时使用 ID,需要使用一个具体的最终类型。
// 直接使用具体的ID类型,比如LongID
@Serializable
data class User(val id: LongID)
Content copied to clipboard
对于一个可序列化类型,作为属性的 ID 必须是一个具体的可字面量序列化类型,而不能是一个抽象类型。
如果对于一个ID字段,你希望能够保证它能够完全的正反序列化,并且你只关心它的字面量而不关系其他方面, 那么你可以考虑将此字段的序列化器标记为 ID.AsCharSequenceIDSerializer.
@Serializable
data class Example(
@Serializable(ID.AsCharSequenceIDSerializer::class)
val id: ID,
val name: String
)
Content copied to clipboard
此序列化其会永远将ID视为其字面值字符串作为序列化目标。
Author
ForteScarlet
See also
Types
Functions
Inheritors
Extensions
Link copied to clipboard
所有的ID都拥有转化为字符序列ID的能力。
Link copied to clipboard
尝试将当前ID转为一个 LongID.
Link copied to clipboard
尝试将当前ID转为一个 NumericalID。