1.枚举类基本用法
枚举类最基本的用法就是实现类型安全的枚举
enum class Direction {
NORTH,SOUTH,WEST
}
每个自举常量都是一个对象。枚举常量通过逗号分开。
2.枚举类定义变量
enum class Direction
{
NORTH,SOUTH,WEST,EAST
}
fun main(args: Array<String>)
{
// 定义一个枚举类变量
var direction1: Direction
// 定义一个枚举类变量,并初始化
var direction2: Direction = Direction.NORTH
// 自动识别枚举类型
var direction3 = Direction.SOUTH
var direction4 = Direction.SOUTH
if(direction3 == direction4)
{
println("枚举类型值相等")
}
else
{
println("枚举类型值不相等")
}
println(Direction.NORTH)
println(direction2)
}
3.为枚举类指定对应的值
因为每个枚举都是枚举类的一个实例,它们是可以初始化的。可以指定对应的值
// 为枚举值指定对应的数值
enum class Direction1 private constructor(val d:Int)
{
NORTH(1), SOUTH(2), WEST(3), EAST(4);
override fun toString(): String {
return d.toString() //返回当前枚举值对应的数字
}
}
fun main(args: Array<String>)
{
var direction1: Direction1 = Direction1.EAST
var direction2 = Direction1.WEST
println(direction1)
println(direction2)
println(direction1.name) //输出name
println(direction2.ordinal) //输出内容
println(Direction1.valueOf("SOUTH"))
for(d in Direction1.values())
{
println(d)
}
}
kotlin为枚举提供了name和ordinal方法,分别用来获取枚举值名称和索引
4. 匿名类
枚举实例也可以声明它们自己的匿名类
num class ProtocolState {
WAITING {
override fun signal() = Taking
},
Taking{
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
fun main(args: Array<String>)
{
var direction1: ProtocolState = ProtocolState.WAITING
var direction2: ProtocolState = ProtocolState.WAITING
if(direction1 == direction2)
{
println("枚举类型值相等")
}
else
{
println("枚举类型值不相等")
}
}
输出结果,枚举类型值相等