Сопоставить java Enum с Kotlin классом данных - PullRequest
0 голосов
/ 02 августа 2020

Я звоню из службы A, которая находится в Kotlin, в службу B, которая находится в Java. Он возвращает мне объект, содержащий несколько полей. Одно из полей, возвращаемых в объекте Java, является перечислением. В моем коде kotlin я определил DTO, который отображает возвращаемый ответ на kotlin. Мне нужно сопоставить это перечисление со строковым значением в kotlin.

DTO в Java:

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

CountryCode - это перечисление.

Класс данных in Kotlin:

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

Любая помощь приветствуется.

1 Ответ

1 голос
/ 02 августа 2020

Ответ на отредактированный вопрос n: Как сопоставить перечисление Java со строкой?

вы можете вызвать name() или toString() в перечислении, чтобы получить Строковое представление его.

name() не может быть перезаписано и всегда возвращает текстовое представление значения, определенного в коде, в то время как toString() может быть перезаписано, так что это может зависеть от вашего варианта использования, что делать использовать. Из-за того, что name() нельзя перезаписать, я предпочитаю всегда использовать name(), что может иметь меньше побочных эффектов или неожиданного поведения при работе с библиотеками, которые не находятся под вашим контролем.

Исходный ответ :

1 этого делать не нужно. Вы можете использовать тот же класс Java также в коде Kotlin.

2 Вы можете просто повторно использовать перечисление, как в варианте 1), вы можете повторно использовать перечисление Java в коде Kotlin:

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