Как передать любое (известное только во время выполнения) перечисление Kotlin в качестве параметра методу в коде Java?

Скажем, у нас есть перечисления

enum class Status {
    OPEN, CLOSED
}

enum class Weekday {
    WORKDAY, DAYOFF
}

Наличие класса Java

public KotlinInvoker {
    public methodWithKotlinEnumAsParameter_namely_AppendWorkingStatusString( ? kotlinEnum) {
    ...
    }
}

Цель состоит в том, чтобы напрямую передать ЛЮБОЕ перечисление jave / kotlin в такую ​​функцию, например, если бы у вас был Java

    <E extends java.lang.Enum<E>>
    methodAcceptingEnumAsParameter(E enum) {
    ...
    return result + ' ' + enum.toString();
    }

так что вы можете передать ему ЛЮБОЕ перечисление. Какая должна быть сигнатура метода, чтобы хорошо работать с перечислением kotlin, а также сопоставляться с перечислением java в соответствии с официальными документами kotlin?


person SoBeRich    schedule 31.05.2018    source источник
comment
Удачи в этом? У меня есть класс Java, который принимает перечисление в своем конструкторе. Проблема в том, что мой класс enum написан на kotlin .. Я мог бы преобразовать класс с конструктором в kotlin, но я ищу решение, которое позволяет мне сохранить класс в java и передать перечисление kotlin.   -  person Kyle    schedule 04.04.2019
comment
@ Кайл нет решения. Это просто разные объявления / типы классов в отличие от большинства типов, отображаемых kotlin stdlib. Никакой умный способ. К несчастью.   -  person SoBeRich    schedule 04.04.2019


Ответы (1)


Ваш пример Java отлично работает в Kotlin:

enum class Status {
    OPEN, CLOSED
}

enum class Weekday {
    WORKDAY, DAYOFF
}

fun <E : Enum<E>> methodWithKotlinEnumAsParameter(arg : E)
{
    println(arg.name)
}

Теперь, если вы, например, вызовете methodWithKotlinEnumAsParameter(Weekday.DAYOFF), он выведет на консоль DAYOFF.

person msrd0    schedule 03.06.2018
comment
Заголовок говорит: Как передать ..Kotlin enum в качестве параметра методу IN JAVA CODE? Ваш метод находится в Котлине, поэтому спасибо за попытку, пожалуйста, перечитайте вопрос. - person SoBeRich; 04.06.2018