在Kotlin中创建一个接受枚举参数的函数

在Kotlin中创建一个接受枚举参数的函数,kotlin,Kotlin,我正在创建一个以枚举值作为参数的函数,但我对Kotlin非常陌生,我找不到任何专门涉及此的材料 例如: enum class Color(val rgb: Int) { RED(0xFF0000), ORANGE(0xffa500), YELLOW(0xffff00), GREEN(0x00FF00), BLUE(0x0000FF), INDIGO(0x4b0082), VIOLET(

我正在创建一个以枚举值作为参数的函数,但我对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")
    }

}
enum class X {
    X, Y
}

fun check(param: X) {
    val unit = when (param) {
        X.X -> println("x")
        X.Y -> println('y')
    }
}
我得到一个错误,上面写着:

One type argument expected for class Enum<E: Enum<E>>
类枚举需要一个类型参数
我已经看了一个多小时的Kotlin文档,但我没有任何东西可以展示。。。是否有人知道如何将此类用作参数?

enum创建一个新类,以便您可以将其用作函数参数类型,如下所示。 有关kotlin中的函数,请参阅


Enum实际上是一种特殊的类(它甚至被称为
Enum类
)。所以,把它当作普通课程来使用,并利用你从中得到的好处

例如:

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")
    }

}
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
}
fun getHexColor (x: Color) = when(x) { // will return a String
        Color.BLUE -> "Battle"
        else -> "otherwise"
}

println(getHexColor(Color.BLUE))
其中,
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 double(x: Int): Int {
    return 2 * x
}
fun getHexColor (x: Color) = when(x) { // will return a String
        Color.BLUE -> "Battle"
        else -> "otherwise"
}

println(getHexColor(Color.BLUE))

哦,感谢上帝,我不知道枚举类是如何使用的。非常好用,谢谢!!!