变量可以是两种不同的类型

时间:2018-11-02 08:47:49

标签: kotlin

我正在研究一个使用ECB贷款数据模板的用例。我遇到的问题是,变量可以是两种不同的类型。例如。字段“承销处的财务报表日期”可以是Date类型,也可以是NoData类型,即枚举。如何在Kotlin中构建它?

我正在寻找类似的东西

val dateOfTheFinancialStatementsAtUnderwriting: Date || NoData

包装这两种类型的自定义类是否是处理此问题的正确方法?

在此先感谢您的帮助!

1 个答案:

答案 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()
    }
}