Если вы не используете поле, которое уже существует в исходном перечислении (например, порядковый номер), вы не сможете делать то, о чем просите, не помещая внешнее перечисление в собственное перечисление.
Конечно, вы можете использовать порядковый номер, но более новая версия внешнего API может изменить порядок элементов в перечислении, поэтому я бы не рекомендовал это.Но, если вы действительно хотите, вы можете сделать что-то вроде этого (опять же, это НЕ рекомендуется):
val Status.flag: Int
get() = this.ordinal
Но я бы определенно рекомендовал обернуть его.Таким образом вы гарантируете, что заданные вами целые значения флага не изменятся.
enum class MyStatus(val status: Status, val flag: Int) {
COMPLETE(Status.COMPLETE, 0),
RUNNING(Status.RUNNING, 1),
WAITING(Status.WAITING, 2);
companion object {
private val STATUS_TO_MYSTATUS = values().associateBy { it.status }
fun fromStatus(status: Status): MyStatus {
return STATUS_TO_MYSTATUS[status] ?: throw Exception("No MyStatus found for status ${status.name}")
}
}
}
Затем вы можете преобразовать Status в MyStatus с помощью MyStatus.fromStatus (...).Или вы можете добавить функцию расширения в Status, чтобы легко конвертировать в MyStatus.
fun Status.toMyStatus() = MyStatus.fromStatus(this)