Можно ли случайно получить элемент класса enum в kotlin? - PullRequest
0 голосов
/ 29 мая 2018

Как и в заголовке:

class Answers {
    enum class Answer(text: String) {
        YES("Yes."),
        No("No."),
        MAYBE("Maybe."),
        AGAIN("Ask again.")
    }
    val answers = Answer.values()
    val rand = Random()
    fun genAnswer ():String {
        val n = rand.nextInt(3)+1
//        return Answer[answers[n]].text
    }
}

Я хочу выбрать элемент enum случайным образом и вернуть его текстовое свойство, но, похоже, я не могу использовать его значение для извлечения элемента.

Я думаю, что информации достаточно.

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Когда вы пишете val / var в конструкторе для параметра, он объявляет свойство внутри класса.Когда вы не пишете это, это просто параметр, передаваемый первичному конструктору.Так что просто добавьте val к ​​тексту параметра конструктора, который сделает его свойством с помощью метода get, и выше программа будет работать ..

import java.util.*

class Answers {
    enum class Answer(val text: String) {
        YES("Yes."),
        No("No."),
        MAYBE("Maybe."),
        AGAIN("Ask again.")
    }
    val answers: Array<Answer> = Answer.values()
    val rand = Random()

    fun genAnswer ():String {
        val n = rand.nextInt(3)+1
        return answers[n].text
    }
}

fun main(String: Array<String>) {
    print(Answers().genAnswer())
}
0 голосов
/ 31 июля 2019

Я использую эти универсальные функции для любого типа enum

/**
 * return random enum value of enum class T
 */
inline fun <reified T : Enum<T>> randomEnum(): T {
    val enumValues: Array<T> = enumValues()
    return enumValues[(0 until enumValues.size).random()]
}

/**
 * return random Int from start to end of range
 */
fun IntRange.random(): Int =
    Random().nextInt((endInclusive + 1) - start) + start
0 голосов
/ 29 мая 2018

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

val randomAnswer = Answer.values().toList().shuffled().first().text

Не забудьте выставить свойство text с помощью val.Пока это просто параметр конструктора:

enum class Answer(val text: String)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...