Почему мы можем создать объект интерфейса при реализации Room Database? - PullRequest
1 голос
/ 19 марта 2020

Может кто-нибудь, пожалуйста, объясните мне это! Мы все знаем, что можем не создать объект интерфейса в Java и Kotlin. Мы можем реализовать интерфейс только из класса. Так что, когда дело доходит до Room Database , мы можем создать объект DAO , который на самом деле является интерфейсом внутри класса репозитория.

Ниже приводится интерфейс 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 используется в качестве объекта:

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)
    }
}

1 Ответ

0 голосов
/ 19 марта 2020

В этом случае вы не создаете WordDao, Room генерирует класс, который реализует WordDao, а room создает код для этого класса. Поэтому, когда вы получаете WordDao, вы генерируете классную комнату, которая реализует WordDao.

...