0

我有这些模型

abstract class Message : Data
data class TextMessage(val m: String): Message
data class ImageMessage(val m: ByteArray): Message

我想通过抽象类 Message 获得一个集合

database.getCollection<Message>

但它实际上将是一个实现类(TextMessage,ImageMes​​sage)实例,具体取决于它的内容

when(val value = collection.findOne()) {
    is TextMessage -> {}
    is ImageMessage -> {}
}

这个怎么做?

4

1 回答 1

0

KMongo 库有 3 个用于对象映射的选项,您的解决方案将取决于使用的是哪一个。

默认情况下,使用杰克逊引擎。您可以通过向 artifactId 添加 -native 后缀来使用 POJO Codec 引擎,或者通过向 artifactId 添加 -serialization 后缀来使用 Kotlinx 序列化。

https://litote.org/kmongo/quick-start/#object-mapping-engine

根据使用的引擎,应用该引擎如何处理多态性:

于 2021-09-05T02:25:49.320 回答