Je crée une fonction qui prend une valeur enum comme paramètre, mais je suis très nouveau dans Kotlin et je ne trouve aucun matériel qui couvre spécifiquement cela.
Exemple:
One type argument expected for class Enum<E: Enum<E>>
J'obtiens une erreur qui dit:
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")
}
}
J'ai parcouru la documentation de Kotlin pendant plus d'une heure et je n'ai rien à montrer il ... est-ce que l'un de vous a une idée de la façon d'utiliser cette classe comme paramètre?
5 Réponses :
enum crée une nouvelle classe afin que vous puissiez l'utiliser comme type d'argument de fonction, comme indiqué ci-dessous. Pour les fonctions de kotlin, voir ici .
fun getHexColor (x : Color)
{
when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
p >
Oh dieu merci, je n'avais aucune idée de la façon dont les classes enum peuvent être utilisées. Fonctionne parfaitement merci !!!
Enum est en fait une classe spéciale (elle est même appelée enum class ). Alors, utilisez-le comme une classe normale et utilisez les avantages que vous en retirez.
Exemple:
enum class X {
X, Y
}
fun check(param: X) {
val unit = when (param) {
X.X -> println("x")
X.Y -> println('y')
}
}
Vous pouvez le faire comme ceci avec une interface par exemple:
fun getHexColor (c: Color): String {
return when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
Comment utiliser la classe enum:
fun useColorClass(color: Color){
println(color.rgb)
}
@Test
fun testColor() {
useColorClass(Color.RED)
useColorClass(Color.BLUE)
useColorClass(Color.GREEN)
}
// output => 16711680, 255, 65280
Une réponse à votre question:
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
Une syntaxe de fonction dans Kotlin ressemble à ceci:
fun getHexColor (color: Color) {
when(color){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}
où x est le nom du paramètre de fonction de type Int . Votre fonction n'est pas valide car vous utilisez Couleur comme nom de paramètre plutôt que comme type. Pour résoudre ce problème, procédez comme suit:
fun double(x: Int): Int {
return 2 * x
}
Vous devez utiliser le type qui est Color:
fun getHexColor (x: Color) = when(x) { // will return a String
Color.BLUE -> "Battle"
else -> "otherwise"
}
println(getHexColor(Color.BLUE))
Notez qu'une fonction préfixée par "get" doit renvoyer quelque chose. Depuis quand est une expression, vous pouvez le faire comme ceci:
fun getHexColor (x: Color) {
when(x){
Color.BLUE -> println("Battle")
else -> print("otherwise")
}
}