第二十节 枚举类、数据类、密封类

1、枚举基本用法

fun main(args: Array) {

    println(Week.Friday)

    getDay(Week.Saturday)



}

fun getDay(week: Week)
{
    when(week)
    {
        Week.Monday-> println("上班")
        
        Week.Sunday-> println("休息")
    }

}


enum class Week{
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday ,Sunday
}

输出:


第二十节 枚举类、数据类、密封类_第1张图片
image.png

2、枚举高级用法

fun main(args: Array) {

    println(Color.RED.r)
    println(Color.RED.g)
    println(Color.RED.b)
}




enum class Color(var r:Int,var g:Int,var b:Int){
    RED(255,0,0),GREEN(0,255,0),BLUE(0,0,255)
}

输出:


第二十节 枚举类、数据类、密封类_第2张图片
image.png

3、数据类(关键字data)
类似于java中的bean,没有什么实际业务逻辑,只是用于封装数据

fun main(args: Array) {

    var news=News("标题","内容","作者","20170101")

    println(news.title)
}


/**
 * 默认生成一些方法
 * 构造函数
 * get set
 * toString
 * hashcode
 * equeals
 * copy
 */

data class News(var title:String,var content:String,var author:String,var time:String)

输出:


第二十节 枚举类、数据类、密封类_第3张图片
image.png

4、密封类(关键字sealed)
枚举类封装的是数据
密封类封装的是类型

fun main(args: Array) {
    val startk = JonSnow()
    val h= hasRight(startk)
    println(h)
}

/**
 * 问题:假设国王有五个儿子RobStark、SansaStark、AryaStark、BrandonStark、jonSnow,最后一个儿子没有继承权,其余的都有
 * 思路:判断有没有继承权
 * 先把所有有继承权的(数量固定) 放在一起  其他都不用管了
 */
fun hasRight(startk: NedStark): Boolean {
    return when (startk) {
        is NedStark.AryaStark -> true
        is NedStark.SansaStark -> true
        is NedStark.RobStark -> true
        is NedStark.BrandonStark -> true
        else -> false
    }
}

//斯塔克
sealed class NedStark {
    //密封类封装的是类型 类型是确定的
    class RobStark : NedStark()

    class SansaStark : NedStark()

    class AryaStark : NedStark()

    class BrandonStark : NedStark()
}

class JonSnow : NedStark()

输出:


第二十节 枚举类、数据类、密封类_第4张图片
image.png

你可能感兴趣的:(第二十节 枚举类、数据类、密封类)