【问题标题】:How to retrieve the value(s) of a parameter declared with vararg in an enum in Kotlin如何在 Kotlin 的枚举中检索使用 vararg 声明的参数的值
【发布时间】:2019-10-16 03:50:23
【问题描述】:

我是 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)根本找不到 log

那么如何使用log[0] 之类的内容检索我的字符串?

注意

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

【问题讨论】:

    标签: android kotlin enums optional-arguments


    【解决方案1】:

    您需要将其更改为:

    enum class StateName(vararg val log: String)
    

    这样就可以访问日志了

    【讨论】:

    • 哇,这么简单吗?我觉得很笨。谢谢
    【解决方案2】:

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

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

    【讨论】:

    • 做简单的vararg val log: String工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多