代码之家  ›  专栏  ›  技术社区  ›  Johann

了解此enum语句的语法

  •  0
  • Johann  · 技术社区  · 7 年前

    我在enum中遇到了以下Kotlin代码:

    enum class Section(val position: Int, val textKey: Int, val fragment: Fragment) {
    
        GUIDE(0, R.string.main_pager_guide, QotGuideFragment()),
        LEARN(1, R.string.main_pager_learn, QotLearnFragment()),
        ME(2, R.string.main_pager_me, QotToBeVisionFragment()),
        PREPARE(3, R.string.main_pager_prepare, QotPrepareFragment()),
        ;
    }
    

    但是,当我查看Enum上的Kotlin文档时,我没有看到任何显示这种语法的内容。该行:

    指南(0,R.string.main_pager_指南,QotGuideFragment())

    我不明白这3个参数是如何使用的。此外,enum类部分显示了3个似乎未使用的构造函数参数。

    enum的官方文件位于:

    https://kotlinlang.org/docs/reference/enum-classes.html

    2 回复  |  直到 7 年前
        1
  •  1
  •   forpas    7 年前

    从…起 https://kotlinlang.org/docs/reference/enum-classes.html

    每个枚举常量都是一个对象

    GUIDE 是一个例子 Section 类,表示初始化为

    GUIDE(0, R.string.main_pager_guide, QotGuideFragment())
    

    指导 ,例如:

    val guidePosition = Section.GUIDE.position
    val guideTextKey = Section.GUIDE.textKey
    val guideFragment = Section.GUIDE.fragment
    
        2
  •  0
  •   gmetax    7 年前

    通常您的枚举将是这样的

    enum class Section() {
        GUIDE,
        LEARN,
        ME,
        PREPARE
    }
    

    没有任何参数

    但在您的示例中,枚举的基本构造函数也具有设置为属性的参数

    enum class Section(**val** position: Int, **val** textKey: Int, **val** fragment: Fragment) 
    

    在构造函数中使用关键字val设置为类的属性

    那么它已经

    GUIDE(0, R.string.main_pager_guide, QotGuideFragment()),
    LEARN(1, R.string.main_pager_learn, QotLearnFragment()),
    ME(2, R.string.main_pager_me, QotToBeVisionFragment()),
    PREPARE(3, R.string.main_pager_prepare, QotPrepareFragment())
    

    所以 GUIDE