Создайте функцию в Kotlin, которая принимает параметр enum - PullRequest
0 голосов
/ 29 января 2019

Я создаю функцию, которая принимает значение enum в качестве параметра, но я очень новичок в 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 и мне нечего показать ... у кого-нибудь из вас естьидея, как использовать этот класс в качестве параметра?

Ответы [ 5 ]

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

Вы должны использовать тип, который 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))
0 голосов
/ 29 января 2019

Синтаксис функции в 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")
    }
}
0 голосов
/ 29 января 2019

Enum на самом деле особый вид класса (его даже называют enum class).Поэтому используйте его как обычный класс и используйте преимущества, которые вы получаете от него.

Пример:

enum class X {
    X, Y
}

fun check(param: X) {
    val unit = when (param) {
        X.X -> println("x")
        X.Y -> println('y')
    }
}
0 голосов
/ 29 января 2019

Вы можете сделать это, например, с помощью интерфейса:

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

Как использовать enum class:

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")
    }
}
0 голосов
/ 29 января 2019

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

fun getHexColor (x : Color)
{
    when(x){
        Color.BLUE -> println("Battle")
        else -> print("otherwise")
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...