Как создать новый экземпляр объекта без первичного ключа? - PullRequest
0 голосов
/ 03 декабря 2018

Извините, это тупой вопрос.Я пытаюсь познакомиться с Kotlin и столкнулся с проблемой.У меня есть приложение 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?)

Как я могу создать новый экземпляр Link без указания _id?

т.е.

var link: Link = Link("url", 12334)

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы можете создать другой конструктор с аннотацией @Ignore, чтобы Room его игнорировал:

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

Если вы передадите null для автоматически сгенерированного поля, оно автоматически сгенерирует новое значение.

0 голосов
/ 03 декабря 2018

Использовать значение по умолчанию в 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(
   // .....
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...