gpt4 book ai didi

kotlin - 如何在 kotlin 中的数据类中为变量提供多种类型

转载 作者:行者123 更新时间:2023-12-03 07:52:53 25 4
gpt4 key购买 nike

我想要一个可以执行此操作的数据类:

data class VariantModal (
val variantId: String,
val variantName: String,
val variantUnit: List<String> || variantUnitOptions
val productId: String,
val variantQuantity: Int
)

variantUnit 可以是字符串列表或枚举值,

enum class variantUnitOptions {
KG,
BUNDLE,
BOX,
PIECE
}

由于我们不能像||一样使用OR,所以我尝试使用密封类以这种方式获得字符串或枚举列表,

sealed class VariantUnit<T>(val value: T) {
class ListOfUnits(value: List<String>) : VariantUnit< List<String>>(value)
class SelectedUnit(value: variantUnitOptions) : VariantUnit<variantUnitOptions (value)
}
data class VariantModal (
val variantId: String,
val variantName: String,
val variantUnit: VariantUnit<>, //error here
val productId: String,
val variantQuantity: Int
)

但是通过这种方式,我收到了预期类型的​​错误,我现在无法给出类型,因为它可以是 List<String>variantUnitOptions 。如何实现预期的行为?非常感谢任何帮助。

提前致谢

最佳答案

您不必将泛型和值放入 VarianUnit。这样做:

sealed class VariantUnit {
class ListOfUnits(val value: List<String>) : VariantUnit()
class SelectedUnit(val value: variantUnitOptions) : VariantUnit()
}

然后你可以使用密封类作为值:

data class VariantModal (
// other values
val variantUnit: VariantUnit,
)

并像平常密封类一样处理它:

fun doSomethingWithVariantUnit(variantUnit: VariantUnit) {
when (variantUnit) {
is VariantUnit.ListOfUnits -> {
val unitsList: List<String> = variantUnit.value
// unitsList is a list, take its size for example
unitsList.size
}
is VariantUnit.SelectedUnit -> {
val unitOption: variantUnitOptions = variantUnit.value
// unitOption is an enum, take its name for example
unitOption.name
}
}
}

关于kotlin - 如何在 kotlin 中的数据类中为变量提供多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76719447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com