Kotlin是否支持100%的Ormlite? (数据类)

时间:2016-02-19 15:41:29

标签: android ormlite kotlin

我是Kotlin的新手,我希望用数据类转换我的java模型类,是否可能?我的意思是Ormlite支持这个吗?

3 个答案:

答案 0 :(得分:4)

我使用OrmLite和Kotlin的数据类没有任何问题。关键是要为所有字段指定默认值,然后Kotlin为数据类生成一个空构造函数:

@DatabaseTable(tableName = "sample_table")
data class SampleRecord(
        @DatabaseField(id = true)
        var id: String? = null,

        @DatabaseField(canBeNull = false)
        var numField: Int? = null,

        @DatabaseField
        var strField: String = "",

        @DatabaseField
        var timestamp: Date = Date()
)

» Working example on GitHub

答案 1 :(得分:2)

我将我的daos转换为普通类没有问题

import com.j256.ormlite.field.DatabaseField
import com.j256.ormlite.table.DatabaseTable

@DatabaseTable(tableName = HabitDao.TABLE)
class HabitDao() {

    companion object {
        const val TABLE = "habitdao"
        const val ORDER = "order"
        const val ID = "id"
    }

    @DatabaseField(columnName = ID, generatedId = true)
    var id: Int = 0

    @DatabaseField(index = true)
    lateinit var title: String

    @DatabaseField
    lateinit var intention: String

    @DatabaseField(columnName = ORDER)
    var order: Int = 0

    constructor(title: String, intention: String) : this() {
        this.title = title
        this.intention = intention
    }

    override fun toString(): String {
        return title
    }
}

您只需要提供空构造函数(请参阅类定义中的构造函数)。此外,lateinit使得属性以后更容易使用。

编辑:数据类似乎添加了在您需要序列化这些对象时非常有用的功能。 Ormlite已经能够处理正常的a.k.a. Java类,所以没有必要这样做。此外,数据类应该包含构造函数中的所有字段,并且您不希望id字段出现在那里。

答案 2 :(得分:0)

不,ORMLite不能与Kotlin数据类(从1.1.2版本开始)一起使用,因为ORMLite要求使用@DatabaseField注释字段,这对于使用数据类语法声明的字段是不可能的。 / p>