Использовать перечисляемые имена без префикса в Kotlin?

#kotlin

#kotlin

Вопрос:

Можно ли использовать имя перечисления без его префикса?

 enum class Color { red, blue, green }

data class Shape(val color: Color)

fun main() {
    println(Shape(color = red))
}
 

Постскриптум

Или, может быть, у него есть что-то вроде литеральных типов в TypeScript? На самом деле мне не нужно перечисление, строковое значение будет в порядке, как только компилятор сможет проверять значения во время компиляции, как в TypeScript.

 type Color = 'red' | 'blue' | 'green'

class Shape {
    constructor(public color: Color) {}
}

console.log(new Shape('red')) // Will be validated at compile time
 

Комментарии:

1. Какой префикс вы имеете в виду? Какой префикс класса нравится Color.red ?

Ответ №1:

Да, вы можете использовать перечисление без префикса класса, если вы его импортируете:

 import Color.*

enum class Color { Red, Blue, Green }

val color = Red
 

Примечание: По соглашению имена перечислений должны начинаться с заглавной буквы.

Редактировать

Сначала я подумал, что можно было бы не импортировать перечисление, когда вы используете его в том же файле, но в другом классе или функции верхнего уровня, но вам все равно придется его импортировать — чтобы избежать префикса класса.

Комментарии:

1. Спасибо, но первый код в вашем примере не будет компилироваться

2. @Alex Craft вы правы. Обновит мой ответ