Как говорит @kris_k, вы можете использовать тип данных Либо. Если вы не хотите добавлять библиотеку (стрелка), вы можете определить ее самостоятельно с помощью закрытого класса:
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()
}
}