美文网首页
kotlin 小知识点

kotlin 小知识点

作者: 一只笔 | 来源:发表于2018-12-09 23:57 被阅读0次

    @[TOC]



    1.map使用

        fun map(){
            //1,声明对象
            val binaryReps=TreeMap<Char,String>()
            //2,赋值    
            for (c in 'A'..'H'){
                val binary=Integer.toBinaryString(c.toInt())
                binaryReps[c]=binary
            }
            //3,遍历
            for ((letter,binary)in binaryReps){
                println("$letter=$binary")
            }
    

    输出结果

    A=1000001
    B=1000010
    C=1000011
    D=1000100
    E=1000101
    F=1000110
    G=1000111
    H=1001000
    


    2.类的使用

    1,成员也可以计算得出
    2,成员可以定义在构造中
    3,构造中也可以添加修饰符

    fun main(args: Array<String>) {
        //新建一个矩形
        val rectangle = Rectangle(5, 5)
       println("宽:${rectangle.width}\n${rectangle.isRectangle}\n${rectangle.describe}")
    }
    
    /**
     * 定义矩形对象
     * @param width 宽
     * @param height 高
     * */
    class Rectangle(val width: Int, private val height: Int) {
        //是否为下方形
        val isRectangle: Boolean get() = width == height
        //描述
        val describe: String
            get() {
                return when (width) {
                    height -> "正方形"
                    else -> "长方形"
                }
            }
    }
    

    输出结果

    宽:5
    true
    正方形
    


    3.Set List Map

    fun setListMap() {
        val set = hashSetOf<Int>(1, 3, 5)
        val list = arrayListOf<Int>(4, 5, 6)
        val map = hashMapOf<Int, String>(7 to "aaa", 8 to "bbb", 9 to "bbb")
        println(set.toString())
        println(list.toString())
        println(map.toString())
    }
    

    输出结果

    [1, 5, 3]
    [4, 5, 6]
    {8=bbb, 9=bbb, 7=aaa}
    


    4.重载方法

    重载方法,如果参数中已经给默认値调用时可以不传

        //调用
        val list = listOf<Int>(1, 2, 3, 4)
        joinToString(list, ",")
        joinToString(list)
    
    /**
     * 重载方法,如果参数中已经给默认値调用时可以不传
     */
    fun <T> joinToString(collection: Collection<T>, separator: String=":"): String {
        val sb = StringBuilder()
        for ((index, element) in collection.withIndex()) {
            sb.append(element)
            sb.append(separator)
        }
        println(sb.toString())
        return sb.toString()
    }
    

    输出结果

    1,2,3,4,
    1:2:3:4:
    


    5.可变参数

    //调用
    setVararg("AAA","BBB","CCC")
    //可变参数关键字vararg 
    fun setVararg(vararg content:String){
        for(s in content){
            println(s)
        }
    }
    

    输出结果

    AAA
    BBB
    CCC
    


    6.中缀的调用

    pair(Pair("你好吗?", "我很好"),Pair("你在哪?", "在杭州"))
    
    fun pair(vararg values: Pair<String, String>) {
        val (number, name) = 1 to "one"
        println("$number+$name")
    
        for (pair in values) {
            println("${pair.first}>>${pair.second}")
        }
    }
    

    输出结果

    1+one
    你好吗?>>我很好
    你在哪?>>在杭州
    


    7.三重引号

    在三重引号中特殊字符不需要转义

       val path = "User/yang/kotlin/chapter.adoc"
        parsePath(path)
        
    fun parsePath(path: String) {
        val regex="""(.+)/(.+)\.(.+)""".toRegex()
        val matchResult=regex.matchEntire(path)
        if (matchResult != null) {
            val(directory,fileName,extension)=matchResult.destructured
            println("$directory---$fileName---$extension") 
        }
    }
    

    输出结果

    User/yang/kotlin---chapter---adoc
    


    8.局部函数

     val user = User(100, "张三", "杭州")
        saveUser(user)
    /**
     * 局部函数
     */
    class User(val id: Int, val name: String, val address: String)
    
    fun saveUser(user: User) {
        //局部函数,统一检查
        fun validate(value: String, fieldName: String) {
            if (value.isEmpty()) {
                throw IllegalArgumentException("Can't save ${user.id} empty $fieldName")
            }
        }
        validate(user.name, "name")
        validate(user.address, "address")
        println("保存--${user.id}--${user.name}--${user.address}")
    }
    

    输出结果

    保存--100--张三--杭州
    


    9.Interface

    接口方法可以有默认的实现

    Button().onClick()
    
    interface IClick {
        //接口方法可以有默认的实现
        fun onClick() {
            println("默认实现")
        }
    }
    
    class Button : IClick {
        override fun onClick() {
            super.onClick()
            println("自己实现")
        }
    }
    

    输出结果

    默认实现
    自己实现
    

    10.内部类

    • 1,通过 inner 修饰表示是内部类
    • 2,不修饰表示是static
    • 3,内部访问外部类 this@Outer
    /**
     * 内部类
     * 1,通过 inner 修饰表示是内部类
     * 2,不修饰表示是static
     * 3,内部访问外部类 this@Outer
     */
    class Outer {
        val name: String = "张三"
        var inner = Inner()
    
        inner class Inner {
            fun getOuter(): Outer {
                println(this@Outer.name)
                return this@Outer
            }
        }
        class Inner2
    }
    

    相关文章

      网友评论

          本文标题:kotlin 小知识点

          本文链接:https://www.haomeiwen.com/subject/kqylhqtx.html