Kotlin关键字用法大全

作者: gaom明 | 来源:发表于2019-11-20 14:54 被阅读0次

var val
var:同时有 getter 和 setter。
val:只有 getter。
val声明代表只读
不可变( immutable )和只读( read-only )是有区别滴
下面例子中,age每次被访问的值都不同

class Person(val birthDay: DateTime) {  
  val age: Int
    get() = yearsBetween(birthDay, DateTime.now())
}

不可以同时声明多个变量

//val xmax, ymax = 100   

与Java不同:作用域不同,变量名可重(名称遮蔽)

fun outter() {
    var a:String
    fun inner() {
        var a:String
    }
}

static
没有 static 关键字

  • companion object包裹
class TestA {
    //用companion object包裹方法,实现java中static的效果
    companion object {
        fun testA() {
        }

        fun testB() {
        }
    }
}
    TestA.testA()
    TestA.testB()
  • @JvmStatic 注解
object ATest {
    @JvmStatic
    fun testA() { }
}
 ATest.testA()

const

 //public final static
    const val constObject: String = "constObject"

as
导包

import org.test.Message as testMessage // testMessage 代表“org.test.Message”

转型

fun testAs(a: Int?, obj: String?) {
    val m1: Int = a as Int
    val m2: Int? = a as? Int
}

open

abstract class A {
    abstract fun getA()
    open fun getB() {}
}

class B : A() {
    override fun getA() {}
    override fun getB() {}
}

to
集合字面量

    val list = listOf("Saab", "Volvo")
    val map = mapOf("firstName" to "John", "lastName" to "Doe")

to 中缀

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

自定义中缀

infix fun <T> T.into(other: Collection<T>): Boolean = other.contains(this)

by

val lazyValue: String by lazy {
    println("computed!")
    "Hello"
}
    println(lazyValue)// computed! "Hello"
    println(lazyValue)//"Hello" 之后的调用只会获取到首次保留的结果 

by 委托模式
委托模式 = 代理模式

interface Call {
    fun printStr(str: String)
    fun printStr2(str: String)
}

class RealCall  : Call {
    override fun printStr(str: String) {
        println("RealCallstr=$str")
    }

    override fun printStr2(str: String) {
        println("RealCallstr222=$str")
    }

}

class Delegate(val call: Call) : Call by call {
    override fun printStr(str: String) {
        println("Delegatestr----start")
        call.printStr(str)
        println("Delegatestr----end")
    }
}

when

fun testWhen2(any: Any) = when (any) {
    any is Int -> 1 //有any is
    any is String -> 2 //有any is
    else -> 3 //结果只走else分支 返回3
} 
//正确写法
fun testWhen3(any: Any) = when (any) {
    is String -> any.length  //无any 
    is List<*> -> any.size
    else -> 0
}

init
匿名内部类
Java 双{{写法

  ArrayList<String> list = new ArrayList<String>() { {
            add("2333");
            add("666");
        } };

Kotlin init

fun main() { 
    val list = object :  ArrayList<String>() {
        init {
            add("2333")
            add("666")
        }
    }
}

相关文章

网友评论

    本文标题:Kotlin关键字用法大全

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