Я создаю функцию, которая принимает значение перечисления в качестве параметра, но я очень новичок в Kotlin и не могу найти какой-либо материал, посвященный этому конкретно.
Пример:
enum class Color(val rgb: Int) {
RED(0xFF0000),
ORANGE(0xffa500),
YELLOW(0xffff00),
GREEN(0x00FF00),
BLUE(0x0000FF),
INDIGO(0x4b0082),
VIOLET(0x8F5E99)
}
fun getHexColor (Color: Enum)
{
when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
Я получаю сообщение об ошибке:
One type argument expected for class Enum<E: Enum<E>>
Я просматривал документацию Kotlin больше часа, и мне нечего показать... кто-нибудь из вас знает, как использовать этот класс в качестве параметра?





enum создает новый класс, поэтому вы можете использовать его как тип аргумента функции, как показано ниже. Для функций в kotlin см. здесь.
fun getHexColor (x : Color)
{
when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
Enum на самом деле является особым классом (он даже называется enum class). Итак, используйте его как обычный класс и используйте преимущества, которые вы получаете от него.
Пример:
enum class X {
X, Y
}
fun check(param: X) {
val unit = when (param) {
X.X -> println("x")
X.Y -> println('y')
}
}
Вы можете сделать это, например, с интерфейсом:
enum class Color(val rgb: Int): IHexColor {
RED(0xFF0000){
override fun getHexColor() = rgb.toString()
},
GREEN(0x00FF00){
override fun getHexColor(): String = rgb.toString()
},
BLUE(0x0000FF){
override fun getHexColor(): String = rgb.toString()
}
}
interface IHexColor {
fun getHexColor(): String
}
@Test
fun testBasic() {
val red = Color.RED
val green = Color.GREEN
val blue = Color.BLUE
val palette = arrayListOf(red, green, blue)
palette.forEach {
println("Color: $it :: hex - ${it.getHexColor()}")
}
}
// output => Color: RED :: hex - 16711680, Color: GREEN :: hex - 65280, Color: BLUE :: hex - 255
Как использовать класс перечисления:
fun useColorClass(color: Color){
println(color.rgb)
}
@Test
fun testColor() {
useColorClass(Color.RED)
useColorClass(Color.BLUE)
useColorClass(Color.GREEN)
}
// output => 16711680, 255, 65280
Ответ на ваш вопрос:
fun getHexColor (c: Color): String {
return when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
Синтаксис функции в Kotlin выглядит так:
fun double(x: Int): Int {
return 2 * x
}
где x — имя функционального параметра типа Int. Ваша функция недействительна, поскольку вы используете Color в качестве имени параметра, а не его типа. Чтобы исправить это, выполните:
fun getHexColor (color: Color) {
when(color){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
Вы должны использовать тип Color:
fun getHexColor (x: Color) {
when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
Обратите внимание, что функция с префиксом «get» должна что-то возвращать. Поскольку когда это выражение, вы можете сделать это так:
fun getHexColor (x: Color) = when(x) { // will return a String
Color.BLUE -> "Battle"
else -> "otherwise"
}
println(getHexColor(Color.BLUE))
О, слава богу, я понятия не имел, как можно использовать классы enum. Работает отлично спасибо!!!