【问题标题】:Map java Enum to Kotlin data class将 java Enum 映射到 Kotlin 数据类
【发布时间】:2020-08-02 23:31:20
【问题描述】:

我正在从 Kotlin 中的服务 A 调用 Java 中的服务 B。它返回一个包含多个字段的对象。 Java 对象中返回的字段之一是枚举。在我的 kotlin 代码中,我定义了一个 DTO,它将返回的响应映射到 kotlin。我需要将此枚举映射到 kotlin 中的字符串值。

Java 中的 DTO:

public class PersonDTO
{
   private Long id;
   private String name;
   private CountryCode countryCode;
}

CountryCode 是一个枚举。

Kotlin 中的数据类:

data class PersonDTO(
val id: Long? = null,
val name: String? = null,
val countryCode: String? = null //How to map the enum to string here..???
)

任何帮助将不胜感激。

【问题讨论】:

  • Kotlin 也有枚举,只需在 Kotlin 代码中导入即可
  • 问题是我需要将响应中的枚举字段映射到 kotlin 中的 String 类型。刚刚编辑了我的问题。对不起。
  • 在枚举上使用.name()

标签: java kotlin enums


【解决方案1】:

回答已编辑的问题n:如何将 Java 枚举映射到字符串?

您可以在枚举上调用name()toString() 以获取它的字符串表示形式。

name() 不能被覆盖,并且总是返回代码中定义的值的文本表示,而 toString() 可以被覆盖,所以它可能取决于你的用例使用什么。由于name() 不能被覆盖,我更喜欢始终使用name(),这样在使用不受您控制的库时副作用或意外行为会更少。

原答案:

1 您不必这样做。您也可以在 Kotlin 代码中使用相同的 Java 类。

2 你可以只重用枚举,就像在选项 1 中一样)你可以在 Kotlin 代码中重用 Java 枚举:

data class PersonDTO(
    val id: Long? = null,
    val name: String? = null,
    val countryCode: CountryCode
)

3 你可以编写一个带有映射函数的 Kotlin 枚举来创建枚举的匹配实例:

enum class KotlinCountryCode {
    EXAMPLE;

    fun fromJavaCountryCode(input: CountryCode): KotlinCountryCode? {
        if (input.name() == EXAMPLE.name) {
            return EXAMPLE
        }
        return null
    }
}

【讨论】:

  • 对不起。请参阅更新的问题。它是 kotlin 中的 String 字段,但传入的响应是枚举。
  • 致反对者:请参阅我的更新答案。请解释您的反对意见,以便我理解您的意见并改进我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多