有人可以向我解释一下!我们都知道我们可以而不是在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。