为什么我们可以在实现房间数据库时创建一个接口对象?

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 房间。