Вы можете попробовать этот способ
open class User {
open var name: String = ""
open var id: Int = 0
}
data class PremiumUser(
override var name: String,
override var id: Int,
var premiumUserAttirbute: String
) : User()
data class FreeUser(
override var name: String,
override var id: Int,
var freeUserAttirbute: String
) : User ()
- Вы не можете иметь все объекты с одинаковыми именами таблиц.
- Если вы извлекаете объект User из базы данных, у вас не будетдополнительные поля от Премиум или Бесплатного пользователя.
- Если это ваш реальный вариант использования, то вам подойдет одна сущность с именем, идентификатором и флагом, которая является логической, и если значение true, то это премиум, если значение false, чемявляется свободным пользователем.
Нет особого смысла в использовании наследования с классами данных, поскольку оно отменяет их назначение.
Редактировать ответ на вопрос в комментариях
Создайте одну сущность
@Entity(tablename = "users")
data class User(
var id: Int,
var name: String,
var isPremium: Boolean
)
, и DAO должна выглядеть следующим образом
interface UserDao {
@Query("SELECT * FROM users")
fun getAllUsers(): List<User>
}
Таким образом, вы получите всех пользователей. Если вы хотите узнать, кто является премиумом, просто проверьте, является ли поле isPremium
истинным. Если пользователь бесплатный, то isPremium
должно быть ложным.