抱歉,这是一个愚蠢的问题。我试图熟悉科特林,却遇到了一个问题。我有一个kotlin应用程序,我在其中使用Room存储数据。
这是我的实体类:
@Entity
data class Link(@PrimaryKey(autoGenerate = true) var _id: Int,
@ColumnInfo(name = "link_url") var linkUrl: String?,
@ColumnInfo(name = "timestamp") var timestamp: Long?)
如何在不指定_id
的情况下创建Link
的新实例?
即
var link: Link = Link("url", 12334)
提前谢谢!
您可以创建另一个带有@Ignore
注释的构造函数,这样Room:就会忽略它
@Ignore
constructor(var linkUrl: String?, timestamp: Long?) : this (null, linkUrl, timestamp)
如果为自动生成的字段传递null
,它将自动生成新值。
在kotlin中使用默认值。
@Entity
data class Link(@PrimaryKey(autoGenerate = true) var _id: Int = -1,
@ColumnInfo(name = "link_url") var linkUrl: String?,
@ColumnInfo(name = "timestamp") var timestamp: Long?)
那你必须这样打电话。
var link: Link = Link(linkUrl = "url",timestamp = 12334)
现在,我们需要使用命名参数作为默认参数_id
是第一个参数。如果_id
是最后一个参数,那么您可以直接调用它。
var link: Link = Link("url", 12334)
注意:如果您希望两个构造函数都在Java中,那么您必须在构造函数上使用@JvmOverloads
。
@Entity
data class Link @JvmOverloads constructor(
// .....
)