如何在Kotlin的枚举中检索使用vararg声明的参数的值

时间:2019-05-30 13:15:53

标签: android kotlin enums optional-arguments

我是Kotlin的新手,我有一个包含许多值的枚举,这些值引用了我的应用程序所具有的不同状态。

现在,无论何时应用进入状态,我都需要记录一些东西,但是枚举中的某些状态可以记录不止一件事(基于来自应用外部的其他参数),而某些状态则不需要记录任何东西。

这是我的枚举:

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

如果使用单个强制性参数StateName(var log: String)声明了枚举,我本可以使用HANDSHAKE_SUCCESS.log来检索其值,但是使用vararg时,IDE(Android Studio)找不到{{1 }}。

那我该如何使用类似log的字符串来检索我的字符串?

注意

  • 我的枚举已经定义(没有参数)并且已在我的应用程序中使用,我不能使用其他方法来更改实际状态/添加日志记录功能
  • 即使我刚刚开始学习,因为项目是用这种语言编写的,我也需要使用Kotlin,所以我只想知道我是否(以及如何)做到这一点。

2 个答案:

答案 0 :(得分:3)

您需要将其更改为:

enum class StateName(vararg val log: String)

通过这种方式您可以访问日志

答案 1 :(得分:0)

您需要在枚举内部创建一个变量,该变量将保存所有如下所示的参数:

  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)
 }