Android 如何创建一个并没有主键的实体的新实例?

Android 如何创建一个并没有主键的实体的新实例?,android,mobile,kotlin,Android,Mobile,Kotlin,抱歉,这是个愚蠢的问题。我试图熟悉科特林,但遇到了一个问题。我有一个kotlin应用程序,我使用Room存储数据 这是我的实体类: @Entity data class Link(@PrimaryKey(autoGenerate = true) var _id: Int, @ColumnInfo(name = "link_url") var linkUrl: String?, @ColumnInfo(name = "timestamp") var timestam

抱歉,这是个愚蠢的问题。我试图熟悉科特林,但遇到了一个问题。我有一个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?)
如何在不指定
\u id
的情况下创建
链接的新实例

var-link:link=link(“url”,12334)


提前谢谢你

在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)
现在我们需要使用命名参数作为默认参数
\u id
是第一个参数。如果
\u id
是最后一个参数,那么您可以直接调用它

var link: Link = Link("url", 12334)
注意:如果您想在Java中同时使用这两个构造函数,那么必须在构造函数上使用
@JVMLowloads

@Entity
data class Link @JvmOverloads constructor(
   // .....
)

您可以使用
@Ignore
注释创建另一个构造函数,以便文件室可以忽略它:

@Ignore
constructor(var linkUrl: String?, timestamp: Long?) : this (null, linkUrl, timestamp)

如果您为自动生成的字段传递
null
,它将自动生成新值。

为什么要重写构造函数,而我们有kotlin的默认值功能???@Moinkhan这在需要两个构造函数的情况下很有用这就是kotlin中的默认值的作用。它将使2构造函数..尝试默认值。。如果您使用的是kotlin,那么它很有用。这将生成具有相同id的所有对象&持久化将在持久化时抛出错误。