我想要一个执行此操作的数据类:
data class VariantModal (
val variantId: String,
val variantName: String,
val variantUnit: List<String> || variantUnitOptions
val productId: String,
val variantQuantity: Int
)
Run Code Online (Sandbox Code Playgroud)
variantUnit 可以是字符串列表或枚举值,
enum class variantUnitOptions {
KG,
BUNDLE,
BOX,
PIECE
}
Run Code Online (Sandbox Code Playgroud)
由于我们不能像 || 一样使用 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
)
Run Code Online (Sandbox Code Playgroud)
但通过这种方式,我收到了 Type 预期的错误,我现在无法给出类型,因为它可以是List<String>
或variantUnitOptions
。如何实现预期的行为?任何帮助是极大的赞赏。
提前致谢
您不必将 generic 和 value 放入VarianUnit
. 这样做:
sealed class VariantUnit {
class ListOfUnits(val value: List<String>) : VariantUnit()
class SelectedUnit(val value: variantUnitOptions) : VariantUnit()
}
Run Code Online (Sandbox Code Playgroud)
那么你可以使用密封类作为值:
data class VariantModal (
// other values
val variantUnit: VariantUnit,
)
Run Code Online (Sandbox Code Playgroud)
并像平常密封类一样处理它:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
489 次 |
最近记录: |