Как получить значение (я) параметра, объявленного с помощью vararg в перечислении в Kotlin - PullRequest
3 голосов
/ 30 мая 2019

Я новичок в Kotlin, и у меня есть перечисление, содержащее много значений, эти значения относятся к различным состояниям, которые есть в моем приложении.

Теперь мне нужно что-то регистрировать всякий раз, когда приложение входит в состояние, но какое-то состояние в перечислении может регистрировать более одной вещи (на основе других параметров, поступающих извне приложения), и для какого-то состояния не нужно что-то регистрировать.

Вот мое перечисление:

enum class StateName(vararg log: String) {
    FIRST_CONNECTION(), // no parameter here
    AUTHORIZATION_CHECK("message 1", "message 2"),
    HANDSHAKE_SUCCESS("message")
    //...
}

Если бы объявил enum с одним обязательным параметром StateName(var log: String) Я мог бы использовать HANDSHAKE_SUCCESS.log для получения его значения, но с vararg IDE (android studio) вообще не находит log.

Так, как я могу получить свою строку с чем-то вроде log[0]?

Примечание

  • Мое перечисление уже определено (без параметров) и используется в моем приложении, и я не могу использовать другой метод изменения фактического состояния / добавления функции ведения журнала
  • Мне нужно использовать Kotlin, даже если я только начал учиться, так как проект был написан на этом языке, поэтому я просто хочу знать, могу ли (и как) сделать это.

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

Вам нужно изменить его на:

enum class StateName(vararg val log: String)

Таким образом, вы можете получить доступ к журналу

0 голосов
/ 30 мая 2019

Вам нужно создать переменную внутри enum, которая будет содержать все аргументы, как показано ниже:

  enum class StateName( vararg log: String) {
        FIRST_CONNECTION(), // no parameter here
        AUTHORIZATION_CHECK("message 1", "message 2"),
        HANDSHAKE_SUCCESS("message");

        public var logParams:Array<out String>

        init{
             logParams=log
        }

    }

И чтобы напечатать параметр, соответствующий конкретному перечислению, вы можете выполнить итерации, как показано ниже:

 for (item in StateName.AUTHORIZATION_CHECK.logParams) {
           println("item = "+item)
 }
...