【发布时间】:2018-09-19 13:55:24
【问题描述】:
在我的 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 属性的意义上是独一无二的?
【问题讨论】:
-
所以应该例如:GOLD 允许 Budle 类型的对象具有列出的值而没有别的?也许它只是我,但很难遵循你真正想要实现的目标/模型这看起来可能是密封类的一个很好的用例
-
@Nikky - 而不是“GOLD 允许 Bundle 类型的对象”,它应该是“您可以选择 GOLD 或 SILVER 类型的 Bundle”
标签: inheritance design-patterns kotlin