如何在 Kotlin 中将一个枚举转换为另一个枚举

问题描述 投票:0回答:2

我在主仓库中有一个枚举:

enum class PilotType {
    REMOVABLE,
    FIXED
}

我在另一个导入的存储库中有另一个枚举:

enum class PilotTypeDto {
    REMOVABLE,
    FIXED
}

在我的主存储库的一个类中,我需要构建这个对象: (pilotType 是 PilotType 类型) (pilotTypeDto 的类型为 PilotTypeDto)

return Pilot(
    ... = ...
    pilotType = pilotTypeDto
    ... = ...
)

我需要将 PilotTypeD 转换为 PilotType。

我开始构建一个扩展函数,但它似乎不允许我创建一个枚举:

fun pilotType(pilotTypeDto: PilotTypeDto): PilotType {
    return PilotType(
        ...                       // this does not work
    )
}
kotlin enums
2个回答
8
投票

你可以这样写:

fun pilotType(pilotTypeDto: PilotTypeDto): PilotType =
    when (pilotTypeDto) {
        PilotTypeDto.REMOVABLE -> PilotType.REMOVABLE
        PilotTypeDto.FIXED -> PilotType.FIXED
    }

但是作为扩展,你可以这样写:

fun PilotTypeDto.toPilotType() = when (this) {
    PilotTypeDto.REMOVABLE -> PilotType.REMOVABLE
    PilotTypeDto.FIXED -> PilotType.FIXED
}

或者通过编写以下内容使其成为枚举的一部分

enum class PilotTypeDto {
    REMOVABLE,
    FIXED;

    fun toPilotType() = when (this) {
        REMOVABLE -> PilotType.REMOVABLE
        FIXED -> PilotType.FIXED
    }
}

0
投票

您还可以制作一个更简单的函数(如@Ivo 的函数):

fun toPilotType(p: PilotTypeDTO): PilotType {
  return when(p) {
     // Add edge cases 
     // example
     PilotTypeDTO.SOME_NON_MATCHING_PILOT -> PilotType.BACKEND_VERSION_OF_THIS_PILOT
     // Those with the same name will be handled here
     else -> PilotType.valueOf(p.name)
  }
}

这样您就可以扩展枚举,而无需每次都更新when语句

© www.soinside.com 2019 - 2024. All rights reserved.