Понимание синтаксиса этого оператора enum - PullRequest
0 голосов
/ 08 января 2019

Я наткнулся на следующий код Котлина для перечисления:

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

Я не понимаю, как используются эти 3 параметра. Кроме того, в разделе enum class показаны 3 параметра конструктора, которые не используются.

Официальные документы по enum:

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

Ответы [ 2 ]

0 голосов
/ 08 января 2019

обычно ваши перечисления будут такими

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 -> фрагмент

0 голосов
/ 08 января 2019

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

Каждая константа перечисления является объектом

поэтому GUIDE является экземпляром класса Section, что означает объект, инициализированный как

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

Вы можете получить значения, которые инициализированы GUIDE, например:

val guidePosition = Section.GUIDE.position
val guideTextKey = Section.GUIDE.textKey
val guideFragment = Section.GUIDE.fragment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...