有人可以向我解释一下!我们都知道我们可以而不是在Java和Kotlin中创建接口(interface)的对象。我们只能从类实现接口(interface)。因此,当涉及到房间数据库时,我们能够创建 DAO 的对象,该对象实际上是存储库类内的接口(interface)。

以下是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()
}

以下是将Dao用作对象的Repository类:
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的类,而room将为该类创建代码。因此,当您获得WordDao时,会生成一个生成的教室,该教室实现了WordDao。

10-05 23:59