我是Kotlin的新手,我希望用数据类转换我的java模型类,是否可能?我的意思是Ormlite支持这个吗?
答案 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()
)
答案 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>