我在主仓库中有一个枚举:
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
)
}
你可以这样写:
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
}
}
您还可以制作一个更简单的函数(如@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语句