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。