我正在研究一个使用ECB贷款数据模板的用例。我遇到的问题是,变量可以是两种不同的类型。例如。字段“承销处的财务报表日期”可以是Date
类型,也可以是NoData
类型,即枚举。如何在Kotlin中构建它?
我正在寻找类似的东西
val dateOfTheFinancialStatementsAtUnderwriting: Date || NoData
包装这两种类型的自定义类是否是处理此问题的正确方法?
在此先感谢您的帮助!
答案 0 :(得分:2)
正如@kris_k所说,您可以使用数据类型Either。如果您不想添加库(箭头),则可以使用密封类自己定义它:
sealed class Either<out L, out R> {
data class Left<out L>(val a: L) : Either<L, Nothing>()
data class Right<out R>(val b: R) : Either<Nothing, R>()
val isLeft: Boolean get() = this is Left<L>
val isRight: Boolean get() = this is Right<R>
}
如何返回Either
:
class Date
class NoData
fun getDateOfTheFinancialStatementsAtUnderwriting(): Either<NoData, Date> {
if (...) {
return Either.Left(NoData())
} else {
return Either.Right(Date())
}
}
如何使用Either
:
val result: Either<NoData, Date> = getDateOfTheFinancialStatementsAtUnderwriting()
when (result) {
is Either.Left -> {
val noData: NoData = result.a
TODO()
}
is Either.Right -> {
val date: Date = result.b
TODO()
}
}