Некоторые производные классы с предопределенными значениями, в то время как другие не - PullRequest
0 голосов
/ 19 сентября 2018

В моем приложении Kotlin я имею дело с некоторыми типами членства.Например:

interface MembershipType {
    fun getExcessOptions(): List 
}

Производные типы: GOLD, SILVER, BRONZE, PLATNIUM

Все 4 типа имеют список дополнительных параметров.Например:

enum class MembershipType(val name: String) : IValueOptions {
    SILVER("silver") {
        override fun getExcessOptions() = listOf(300,200,100)
    }, //for GOLD, BRONZE, PLATNIUM etc

Для типов GOLD и SILVER их можно выбрать как Bundle, поэтому у них должен быть список предопределенных valueOptions, из которых можно выбрать.

Для BRONZE, PLATNIUM они могут быть только Named, поэтому пользователь вводит собственное значение, у него есть выбор ..

В основном я хочу представить следующее:

MemeberShip Type || Options           || Value Options
GOLD             || Bundle            || 100, 200, 3000
SILVER           || Bundle and Named  || 4000, 5000
PLATINUM         || Named
BRONZE           || Named


data class Bundle (
        val excess: Int
        val value: Int
) 

data class Named (
        val excess: Int
        val value: Int
) 

data class Selection(val bundle : Bundle?, val items : List<Named>)

Как я могу представить это в терминах классов и наследования в Kotlin или даже в виде перечислений, поскольку два типа уникальны в том смысле, что они имеют заранее определенное свойство valueOptions?

1 Ответ

0 голосов
/ 19 сентября 2018

может быть, это может дать вам отправную точку

sealed class MembershipType(val label: String) {
    abstract val excessOptions: List<Int>
    object GOLD: MembershipType("GOLD"), OtherInterface {
        override val excessOptions= listOf(100, 200, 3000)
        override val foo = "bar"
    }
    object SILVER: MembershipType("SILVER"), OtherInterface {
        override val excessOptions= listOf(4000, 5000)
        override val foo = "baz"
    }
}

interface OtherInterface {
    val foo: String
}

запечатанные классы похожи на объединенные классы и перечисления, вы больше не можете расширять запечатанный класс извне, и каждый объект может расширять различные интерфейсы

больше об этом можно найти в документации: https://kotlinlang.org/docs/reference/sealed-classes.html

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