Room, Boolean и kotlin интерфейс приводят к неоднозначной ошибке геттера - PullRequest
1 голос
/ 12 февраля 2020

Имея следующий интерфейс и класс:

interface IUserCreated {
    val userCreated: Boolean
}

@Entity
data class Test(

        @PrimaryKey @ColumnInfo(name = "test_id") var id: Long,
        @ColumnInfo(name = "user_created") override val userCreated: Boolean

) : IUserCreated

Это приводит к следующей ошибке:

error: Ambiguous getter for Field(element=userCreated, name=userCreated, type=boolean, affinity=INTEGER, collate=null, columnName=user_created, defaultValue=null, parent=null, indexed=false, nonNull=true). 
All of the following match: getUserCreated, isUserCreated. You can @Ignore the ones that you don't want to match.

Вопрос

Как я могу использовать @Ignore аннотация в этом примере? Логическое поле userCreated является частью сущности, я просто хочу игнорировать неиспользуемое getUserCreated и сообщить комнате, что оно должно использовать функцию получения по умолчанию kotlin isUserCreated

Примечание

Я знаю, что могу решить эту проблему следующим образом:

interface IUserCreated {
    val internalUserCreated: Boolean
    fun getUserCreated(): Boolean = internalUserCreated
}

@Entity
data class Test(

        @PrimaryKey @ColumnInfo(name = "test_id") var id: Long,
        @ColumnInfo(name = "user_created") override val internalUserCreated: Boolean

) : IUserCreated

Интересно, смогу ли я как-то решить это без обходного пути, я не хочу делать это для каждого логического значения поле в любой сущности, которую я использую, но я не знаю, как использовать аннотацию @Ignore для решения проблемы.

...