Enums 是否可以在kotlin中使用枚举序号而不显式调用序号?

Enums 是否可以在kotlin中使用枚举序号而不显式调用序号?,enums,kotlin,Enums,Kotlin,在C中,枚举都是数字的,您可以仅通过名称引用值 例如: #include <stdio.h> enum week { sunday, monday, tuesday, wednesday, thursday, friday, saturday }; int main() { enum week today; today = wednesday; printf("Day %d",today+1); return 0; } 要访问元素,我必须使用ve

在C中,枚举都是数字的,您可以仅通过名称引用值

例如:

#include <stdio.h>

enum week { sunday, monday, tuesday, wednesday, thursday, friday, saturday };

int main()
{
    enum week today;
    today = wednesday;
    printf("Day %d",today+1);
    return 0;
}
要访问元素,我必须使用verbose
Week.monday.ordinal

重写运算符 演示代码:

enum class WeekDay {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY;

    companion object: Iterable<WeekDay> {
        override fun iterator() = values().iterator()
    }


    operator fun unaryPlus() = ordinal
    operator fun not() = ordinal
}

fun main(args: Array<String>) {
    for (day in WeekDay) {
        println("$day ${!day} ${+day}")
    }
}
这说明了如何使用一元运算符来获取序数,我包括了两个示例:

  • 一元加号
    • 这将覆盖+运算符,我将其用作
      +day
  • 不是
    • 这就覆盖了!运算符,我将其用作
      !日期
使用扩展函数 您可以创建一个扩展函数,该函数调用要调用的函数,但从传递的值中获取序号。这将使电话如下所示:

enum class Week { sunday, monday, tuesday, wednesday, thursday, friday, saturday }
  • 使用代码
    • 扩展函数(枚举成员)
      • 目标方法(序数)
基本上,答案很好,很完整。但在kotlin中,也可以重写invoke()运算符

enum class Weekday { MONDAY, TUESDAY;

    operator fun invoke(): Int {
       return ordinal
    }
}

fun main(args: Array<String>) {
    print("${Weekday.TUESDAY() + 1}")
}
enum类工作日{周一、周二;
运算符fun invoke():Int{
返回序号
}
}
趣味主线(args:Array){
打印(${Weekday.周二()+1}”)
}
结果:2


AFM它更漂亮

你只是用常数来表示数字吗?我唯一能想到的是,你可以用
+Week.sunday
,但我不确定你是不是这样想的want@jrtapsell是的,只适用于数字,就像在C中一样。数字是从0到N。@user5507535你想用它做什么,可能有更好的方法来实现你想做的事情
enum class Weekday { MONDAY, TUESDAY;

    operator fun invoke(): Int {
       return ordinal
    }
}

fun main(args: Array<String>) {
    print("${Weekday.TUESDAY() + 1}")
}