了解此枚举语句的语法

时间:2019-01-08 10:09:38

标签: kotlin

我遇到了以下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()),
    ;
}

但是,当我查看有关枚举的Kotlin文档时,我没有看到任何显示这种语法的东西。该行:

  

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

我不明白这三个参数是如何使用的。另外,枚举类Section显示了3个似乎未使用的构造函数参数。

有关枚举的官方文档位于:

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

2 个答案:

答案 0 :(得分:1)

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

  

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

所以GUIDESection类的实例,表示对象初始化为

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

您可以获取初始化GUIDE的值,如下所示:

val guidePosition = Section.GUIDE.position
val guideTextKey = Section.GUIDE.textKey
val guideFragment = Section.GUIDE.fragment

答案 1 :(得分:0)

通常您的枚举会像这样

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 0->位置,R.string.main_pager_guide-> textKey和QotGuideFragment->片段