美文网首页
Kotlin学习笔记(自己用)

Kotlin学习笔记(自己用)

作者: Wavky | 来源:发表于2018-04-04 21:45 被阅读0次

Kotlin

kotlin-in-chinese

kotlin-for-android-developers-zh

Kotlin 一门强大的语言

Kotlin 的一些实用小技巧

密封类 sealed class
枚举类进阶版,枚举类限定有限值集合,密封类限定有限类型集合
密封类限制只能在当前文件内派生子类

默认所有类都是final类,可公开派生的类需要使用 open 修饰符定义,并在该类内部不想被覆盖的方法前添加 final 修饰符

类静态成员(伴随对象):companion object {}

var member: Type
    get() = 
    set(value) {field = value}

field 关键词只能用于属性的访问器.

var属性有getter和setter

val属性只有getter

编译时常量属性 const val WHATEVER = "www" 定义在top-level声明

延迟属性的初始化可用lateinit var anyway: Type

懒属性val what: Type by lazy {value()}

匿名内部类

addListener(object : OnxxListener { .. })
val ab = object : A(1), B {
    override val y = 14
}
val any = object { ... }
val any = object: Any() { ... }

POJO类:data class

单例对象:object whatever

通过POJO类可使用多重解构声明:

data class Point(x, y)
val (a, b) = point1

变长参数 fun fn(vararg x: Type)

反射,使用双冒号

::property  // 访问顶级元素(属性、函数)
String::class  // 获取到String的class类型(KClass)

val property = Object::property  // 反射引用属性成员
property.get(object)  // 通过反射的属性成员获取特定对象的属性值

val method = Object::methodName  // 反射引用函数
method.invoke(object, args)  // 指定对象调用反射的函数

val property = "123"::length  // 绑定到特定对象的反射引用
property.get()

:: Foo  // 反射引用类构造函数

val ref: KFunction1<String, Type> = O::method  // 指定类型反射重载的函数

class类型

arg: KClass<*>
String::class    // 获取到String的class类型(KClass)

匿名函数

fun(it):ReturnType { }
fun(it) = statement

lambda

(Type..) -> ReturnType  // 类型签名
{x, y -> statement}  // 定义
{statement}  // 只有一个参数时,可省略参数,使用 it 作为默认参数名
fun(x: Int, y: Int ): ReturnType = statement  // 定义文本的显式写法
fun(x: Int, y: Int ): ReturnType {statement}  // 定义文本的显式写法


Object.() -> ReturnType  // 拥有接收者的类型签名

匿名函数扩展

val sum = fun Int.(other: Int): Int = this + other
val sum: Int.(Int) -> Int = { other -> plus(other) } 
fun Int.sum(other: Int): Int = this + other
http://kotlinlang.org/docs/reference/lambdas.html

关于扩展

一般情况下都在top level定义

函数扩展基于声明静态调用,与对象实际实现类无关

同名成员函数优先于扩展函数

对 Any? 类型扩展,可应对任意类型的 null 值情况

属性扩展只能使用getter/setter提供,并且不能使用field(并不真的添加类成员)

显式类型转换

x as String    // x转换为String类型,如果x=null则抛出异常
x as? String   // x尝试转换为String?,失败则返回null

引用相等

a === b
a !== b

null异常

a?.length()
a.length()
a?.length() ?: -1
a !!.length()  // 强制转换为非null类型,a==null时抛出null异常

相关文章

网友评论

      本文标题:Kotlin学习笔记(自己用)

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