Как перегрузить методы в Котлине - PullRequest
0 голосов
/ 12 июня 2019

В моем текущем Android-приложении используется Kotlin & Room

У меня есть BaseDAO интерфейс, как указано ниже: -

interface BaseDAO<T> {

    /**
     * Insert an object in the database.
     *
     * @param obj the object to be inserted.
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(obj: T) : Long

    /**
     * Insert multiple objects in the database.
     *
     * @param obj the objects to be inserted.
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(obj: List<T>) : List<Long>

    /**
     * Update an object from the database.
     *
     * @param obj the object to be updated
     */
    @Update
    fun update(obj: T)

    /**
     * Delete an object from the database
     *
     * @param obj the object to be deleted
     */
    @Delete
    fun delete(obj: T)
}

Я также хотел бы иметь метод вставки, который принимает одинэкземпляр DO как это в моем конкретном интерфейсе DAO

@Dao
interface SingleDAO : BaseDAO<SingleDO> {

    @Query("SELECT count(*) from single limit 1")
    fun count(): Long

    /**
     * Insert single object in the database.
     *
     * @param obj the object to be inserted.
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(obj: SingleDO) : Long
}

Android Studio сообщает об этой ошибке компиляции

'insert' hides member of supertype 'BaseDAO' and needs 'override' modifier

Я хочу перегрузить, а не переопределить 'insert' метод

Если я попытаюсь добавить '@JvmOverloads' к методу перегрузки insert, Android Studio выдаст мне эту ошибку

`'@JvmOverloads'` annotation cannot be used on interface methods

Как я могу перегрузить метод BaseDAO?

1 Ответ

1 голос
/ 12 июня 2019

Я считаю, что вы должны просто удалить аннотацию @JvmOverloads:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...