Переменная может быть двух разных типов - PullRequest
0 голосов
/ 02 ноября 2018

Я работаю над вариантом использования, в котором я использую шаблоны данных ссуды ECB. Проблема, с которой я столкнулся, состоит в том, что переменные могут быть двух разных типов. Например. поле «Дата финансовой отчетности при страховании» может иметь тип Date, а также тип NoData, который является Enum. Как я могу построить это в Kotlin?

Я ищу что-то вроде:

val dateOfTheFinancialStatementsAtUnderwriting: Date || NoData

Будет ли пользовательский класс, который объединяет эти два типа, правильным способом справиться с этим?

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 02 ноября 2018

Как говорит @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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...