笔记:kotlin 学习第四天

  1. 中缀表达式

    /**
     * @ 文件名:   `01.中缀表达式`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 14:27
     * @ 描述:    infix
     * Tom sayHelloTo John
     */
    fun main(args: Array<String>) {
    
        val pair = "a" to 1
    
        val tom = Person()
        tom.sayHelloTo("John")
    
        tom sayHelloTo "John"//方法前面添加infix关键字
    }
    
    class Person {
        infix fun sayHelloTo(name: String) {
            "你好$name"
        }
    }
    
  1. 类委托

    /**
     * @ 文件名:   `02.类委托`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 14:27
     * @ 描述:    by
     * 小头爸爸委托大头儿子洗碗
     */
    fun main(args: Array<String>) {
        val smallHeadFather = SmallHeadFather()
        smallHeadFather.wash()
    }
    
    interface WashPower {
        fun wash()
    }
    
    class SmallHeadFather : WashPower by BigHeadSon()
    
    class BigHeadSon : WashPower {
        override fun wash() {
            println("大头儿子洗碗")
        }
    }
    
  2. 类委托实现二

    /**
     * @ 文件名:   `03.类委托实现二`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 14:27
     * @ 描述:    by
     */
    fun main(args: Array<String>) {
    
        val bigHeadSon = BigHeadSon()
        val smallHeadSon = SmallHeadSon()
    
        //val bigHeadFather = BigHeadFather(bigHeadSon)
        val bigHeadFather = BigHeadFather(smallHeadSon)
        bigHeadFather.wash()
    
    }
    
    interface WashPower {
        fun wash()
    }
    
    class SmallHeadSon : WashPower {
        override fun wash() {
            println("小头儿子开始洗碗")
        }
    }
    
    class BigHeadSon : WashPower {
        override fun wash() {
            println("大头儿子开始洗碗")
        }
    }
    
    class BigHeadFather(var washPower: WashPower) : WashPower by washPower
    
  1. 类委托功能加强

    /**
     * @ 文件名:   `04.类委托功能加强`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 14:31
     * @ 描述:
     */
    fun main(args: Array<String>) {
        val smallHeadSon = SmallHeadSon()
        val bigHeadSon = BigHeadSon()
    
        val bigHeadFather = BigHeadFather(smallHeadSon)
        //val bigHeadFather = BigHeadFather(bigHeadSon)
    
        bigHeadFather.wash()
    }
    
    interface WashPower {
        fun wash()
    }
    
    class SmallHeadSon : WashPower {
        override fun wash() {
            println("小头儿子开始洗碗")
        }
    }
    
    class BigHeadSon : WashPower {
        override fun wash() {
            println("大头儿子开始洗碗")
        }
    }
    
    class BigHeadFather(var washPower: WashPower) : WashPower by washPower {
        override fun wash() {
            println("付给洗碗的儿子一块钱")
            washPower.wash()
            println("碗洗的不错,下次还找你洗")
        }
    }
    
  1. 属性委托

    /**
     * @ 文件名:   `05.属性委托`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 14:41
     * @ 描述:    by
     * 妈妈帮忙保管压岁钱
     */
    
    fun main(args: Array<String>) {
        val bigHeadSon = BigHeadSon()
    
        bigHeadSon.money = 100//收到100块压岁钱
    
        println(bigHeadSon.money)//50 被代保管了一半
    
    }
    
    class BigHeadSon {
        var money: Int by Mother()
    }
    
    class Mother {
    
        var moneySon = 0
        var moneyMother = 0
    
        operator fun getValue(bigHeadSon: BigHeadSon, property: KProperty<*>): Int {
            return moneySon
        }
    
        operator fun setValue(bigHeadSon: BigHeadSon, property: KProperty<*>, i: Int) {
            moneySon = i / 2
            moneyMother = i / 2
        }
    }
    
  1. 惰性加载

    /**
     * @ 文件名:   `06.惰性加载`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 14:41
     * @ 描述:    by lazy {  }
     * 字段必须 val 修饰
     * 1,by lazy 放到成员变量中,可以单独存在
     * 2,by lazy 返回值就是最后一行
     * 3, by lazy 是线程安全的
     */
    
    fun main(args: Array<String>) {
        val lazy = Lazy()
        println(lazy.name)
        println(lazy.name)
        println(lazy.name)
    }
    
    class Lazy {
        val name: String by lazy {
            println("只初始化一次")
            "懒加载"
        }
    }
    
  1. 延迟加载

    /**
     * @ 文件名:   `07.延迟加载`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 15:03
     * @ 描述:    lateinit
     *
     * 1.by lazy 和lateinit  都可以单独使用或者放到成员变量中使用
     * 2.by lazy 知道具体值   用的时候再加载,lateinit  不知道具体值  后面再赋值
     * 3.by lazy变量必须通过val修饰  lateinit需要通过var修饰
     */
    fun main(args: Array<String>) {
        val user = User()
        println(user.name + user.phone)
    
        user.name = "林青霞"
        user.phone = "110"
    
        title = "标题"
    
        println(user.name + user.phone)
    }
    
    
    lateinit var title: String
    //lateinit var money: Byte //lateinit不支持原始数据类型
    
    class User {
        lateinit var name: String
        lateinit var phone: String
    }
    
  1. 扩展函数

    /**
     * @ 文件名:   `08.扩展函数`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 15:10
     * @ 描述:    String.myIsEmpty()
     *
     * 判断字符串是否为空
     */
    
    fun main(args: Array<String>) {
        val str = null
        //val str = "abc"
        val isEmpty = str?.myIsEmpty()
        println(isEmpty)
    
    }
    
    fun String.myIsEmpty(): Boolean {
        return this == null || this.isEmpty()
    }
    
  1. kotlin中的object单例

    /**
     * @ 文件名:   `09.kotlin中的object单例`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 15:48
     * @ 描述:    object ClassName
     */
    
    fun main(args: Array<String>) {
        println(SingleInstance.name)
        SingleInstance.login("110", "12345")
    }
    
    object SingleInstance {
        var name: String = "张三"//private static String name;
        fun login(phone: String, pwd: String) {
            println("登录成功: $phone + $pwd")
        }
    
        /* 实现单例的关键代码
        static {
            SingleInstance var0 = new SingleInstance();
            INSTANCE = var0;
            name = "张三";
        }*/
    }
    
  1. 伴生对象

    /**
     * @ 文件名:   `10.伴生对象`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 16:21
     * @ 描述:    companion object {  }
     */
    fun main(args: Array<String>) {
        val person = Person()
        println(person.age)
        println(Person.name)
    }
    
    class Person {
        //非静态属性
        var age = 10
    
        companion object {
            //静态属性
            var name = "林志玲"
        }
    }
    
  1. 和Java一样的单例

    /**
     * @ 文件名:   `11.和Java一样的单例`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 16:35
     * @ 描述:
     */
    fun main(args: Array<String>) {
        println(Utils.instance.isCanLogin("110"))
    }
    
    /**
     * 1,私有化构造方法:private constructor()
     * 2,初始化一个私有的静态成员变量:companion object { val instance}
     * 3,对外提供一个公共的方法返回该对象:by lazy { Utils() }
     */
    class Utils private constructor() {
    
        companion object {
            val instance by lazy { Utils() }//惰性加载,只会加载一次,并且线程安全的
        }
    
        fun isCanLogin(phone: String): Boolean {
            return phone.myIsEmpty() && phone.length == 11
        }
    }
    
  1. 枚举

    /**
     * @ 文件名:   `12.枚举`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 16:35
     * @ 描述:   定义一个枚举类,星期一到星期天 Monday Tuesday Wednesday Thursday Friday Saturday Sunday
     *          并定义一个方法判断是否是工作日
     */
    fun main(args: Array<String>) {
    
        println(todo(WEEK.TUESDAY))
        WEEK.values().forEach {
            println(it)
        }
    }
    
    enum class WEEK {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
    fun todo(week: WEEK): String {
        return when (week) {
            in WEEK.MONDAY..WEEK.FRIDAY -> {
                "工作日"
            }
            WEEK.SATURDAY, WEEK.SUNDAY -> {
                "休息日"
            }
            else -> {
                "其他情况"
            }
        }
    }
    
  1. 枚举加强

    /**
     * @ 文件名:   `13.枚举加强`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 16:35
     * @ 描述:    定义一个枚举类 初始化三原色 R G B
     */
    fun main(args: Array<String>) {
        println(COLOR.RED.r)
        println(COLOR.GREEN.g)
        println(COLOR.BLUE.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)
    }
    
  1. 数据类

    /**
     * @ 文件名:   `14.数据类`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 16:35
     * @ 描述:    data class 定义一个JavaBean
     */
    
    fun main(args: Array<String>) {
        val banner = Banner("title", "http://www.baidu.com", 10011)
        println(banner.title + banner.url +
                banner.component3())//第三个元素 id
        val (title1, url, id) = Banner("title", "http://www.baidu.com", 10011)
        println(url)
    
    }
    
    // BaseBean abcd = new Gson().fromJson("json", BaseBean.class);
    
    data class Banner(
            var title: String,
            var url: String,
            var id: Int)
    
  1. 密封类

    /**
     * @ 文件名:   `15.密封类`
     * @ 创建者:   ty
     * @ 时间:    2018/7/20 16:49
     * @ 描述:    sealed class
     */
    fun main(args: Array<String>) {
    
        println(hasRightSon(NedStark.SansaStark()))
    
        println(hasRightSon(JohnSnow()))
    }
    
    fun hasRightSon(stark: NedStark):Boolean{
        return when (stark) {
            is NedStark.RobStark -> {
                true
            }
            is NedStark.SansaStark ->{
                true
            }
            is NedStark.AryaStark->{
                true
            }
            is NedStark.BrandonStark->{
                true
            }
            else -> {
                false
            }
        }
    }
    
    //密封类封装的是类型 类型是确定的
    sealed class NedStark {
        class RobStark : NedStark()
        class SansaStark : NedStark()
        class AryaStark : NedStark()
        class BrandonStark : NedStark()
    }
    
    class JohnSnow : NedStark()
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容