kotlin 小知识点

@[TOC]



1.map使用

    fun map(){
        //1,声明对象
        val binaryReps=TreeMap()
        //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) {
    //新建一个矩形
    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(1, 3, 5)
    val list = arrayListOf(4, 5, 6)
    val map = hashMapOf(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(1, 2, 3, 4)
    joinToString(list, ",")
    joinToString(list)

/**
 * 重载方法,如果参数中已经给默认値调用时可以不传
 */
fun  joinToString(collection: Collection, 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) {
    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([email protected])
            return this@Outer
        }
    }
    class Inner2
}

你可能感兴趣的:(kotlin 小知识点)