转载请注明出处 第一次翻译文档,水平有限,如有任何错误和不妥,望指正。此外如想知道与 Realm 和 GreenDAO 的对比请查看这篇 官网: 官方示例:
ObjectBox 在 Android 平台上为 Kotlin 提供了完整的支持。这允许使用 Kotlin 类(常规类和data
类)来创建实体。通过对 Kotlin 的支持,你可以高效地构建更快的应用程序。
配置
配置方式与 java 项目的配置相同,请参阅页面。此外,我们提供了一个很小的 Kotlin 扩展函数的依赖库。我们会对它持续更新,所以。只需将其添加到模块依赖项:
dependencies { compile "io.objectbox:objectbox-android:$objectboxVersion" compile "io.objectbox:objectbox-kotlin:$objectboxVersion"}复制代码
当您完成了Sync project
,就可以在 Kotlin 中定义实体。
Kotlin实体
在Kotlin,你应该这样定义ID属性:
@Id var id: Long = 0复制代码
ID 必须是一个var
(不是val
),因为 ObjectBox 在put
一个新实体后为其分配 ID。并且,ID 应该是基础数据类型的Long
,同时,赋值为特殊值0,将它标记为一个新的实体。
所以一个简单的数据类是这样的:
@Entitydata class Note( @Id var id: Long = 0, val text: String)复制代码
实体类的构造器
ObjectBox需要调用构造函数来创建对象。它将选择下面其中一种:
- all-args 构造函数: 如果 ObjectBox 找到一个与所有持久化属性匹配的构造函数(类型和名称匹配),它将优先调用它。
- no-args 构造函数: 如果没有找到 all-args 构造函数,ObjectBox 则会调用 no-args (默认)构造函数初始化字段。
注意:Kotlin的data
类通常会提供兼容的 all-args 构造函数。但是,如果是临时属性或着映射关系属性是构造函数的一部分,则ObjectBox不能使用它。
在Kotlin中定义映射关系
在Kotlin中定义关系非常类似于标准Java的。在Kotlin中,通常会使用一个lateinit
修饰符来表示关系属性。如上述连接所述“初始化魔术”也是相同的(这句翻译相当的别扭,不是很清楚它指的什么,希望有人能纠正)。
示例:
@Entityclass Order { @Id var id: Long = 0 lateinit var customer: ToOne} @Entityclass Customer { @Id var id: Long = 0 @Backlink lateinit var orders: List }复制代码