为什么我们可以在实现房间数据库时创建一个接口对象?
How come we can create an object of an Interface when implementing Room Database?
谁能给我解释一下!我们都知道我们可以 not 在 Java 和 Kotlin 中创建接口的对象。我们只能从 class 实现一个接口。那么,当谈到 Room Database 时,我们能够创建一个 DAO 的对象,它实际上是存储库中的一个接口 class.
以下是 Dao 接口:
import androidx.lifecycle.MutableLiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
@Dao
interface WordDao {
@Query("SELECT * from word_table ORDER BY word ASC")
fun getAlphabetizedWords(): MutableLiveData<ArrayList<Word>>
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(word: Word)
@Query("DELETE FROM word_table")
suspend fun deleteAll()
}
以下是存储库class,其中 Dao 被用作对象:
import androidx.lifecycle.MutableLiveData
class WordRepository(private val wordDao: WordDao) {
val allWords: MutableLiveData<ArrayList<Word>> = wordDao.getAlphabetizedWords()
suspend fun insert(word: Word) {
wordDao.insert(word)
}
}
在这种情况下,您不创建 WordDao,Room 生成实现 WordDao 的 class,而 room 为此 class 创建代码。因此,当您获得 WordDao 时,您会生成一个实现 WordDao 的 class 房间。
谁能给我解释一下!我们都知道我们可以 not 在 Java 和 Kotlin 中创建接口的对象。我们只能从 class 实现一个接口。那么,当谈到 Room Database 时,我们能够创建一个 DAO 的对象,它实际上是存储库中的一个接口 class.
以下是 Dao 接口:
import androidx.lifecycle.MutableLiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
@Dao
interface WordDao {
@Query("SELECT * from word_table ORDER BY word ASC")
fun getAlphabetizedWords(): MutableLiveData<ArrayList<Word>>
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(word: Word)
@Query("DELETE FROM word_table")
suspend fun deleteAll()
}
以下是存储库class,其中 Dao 被用作对象:
import androidx.lifecycle.MutableLiveData
class WordRepository(private val wordDao: WordDao) {
val allWords: MutableLiveData<ArrayList<Word>> = wordDao.getAlphabetizedWords()
suspend fun insert(word: Word) {
wordDao.insert(word)
}
}
在这种情况下,您不创建 WordDao,Room 生成实现 WordDao 的 class,而 room 为此 class 创建代码。因此,当您获得 WordDao 时,您会生成一个实现 WordDao 的 class 房间。