Kotlin大法:
it 单个参数的隐式名称



限定的返回


编写Kotlin代码文档
Kotlin注解处理
要声明注解,请将 annotation 修饰符放在类的前⾯:
annotation class Fancy
注解的附加属性可以通过⽤元注解标注注解类来指定:
@Target 指定可以⽤该注解标注的元素的可能的类型(类、函数、属性、表达式等);
@Retention 指定该注解是否存储在编译后的 class ⽂件中,以及它在运⾏时能否通过反射可⻅( 默认都是 true);
@Repeatable 允许在单个元素上多次使⽤相同的该注解;
@MustBeDocumented 指定该注解是公有 API 的⼀部分,并且应该包含在⽣成的 API ⽂档中显⽰的类或⽅法的签名中。
annotation class Special(val why: String) @Special("example") class Foo {}




反射
获取 Kotlin 类的运⾏时引⽤:
val c = MyClass::class
String::toCharArray 等价于String() -> CharArray

⾃ Kotlin 1.2 起,⽆需显式指定 this 作为接收者:this::foo 与 ::foo 是等价的。


Kotlin优秀代码示例
val listener = OnClickListener { view ->
val text = when (view.id) {
R.id.button1 -> "First button"
R.id.button2 -> "Second button"
else -> "Unknown button"
}
toast(text)
}
读书笔记
Kotlin中外部类不能访问内部类和嵌套类的private成员
Kotlin中可变参数传数组,必须把数组展开,即在数组前面加*
用集合前先考虑集合是否可变和不可变,集合里面的元素是否为空,集合是否为空
Kotlin中,protected成员只对该类及其子类可见
元注解 @Retention 的默认值在Java中是 RetentionPolicy.CLASS ,即注解保留在 .class 文件中,但是运行时不能获取;在Kotlin中是 RetentionPolicy.RUNTIME ,即运行时可以使用。一般来说,Kotlin中不需要特别声明 @Retention ,因为我们一般就是要使用 RetentionPolicy.RUNTIME。
关于Return,匿名函数会从自身返回,其他的会从最接近的使用fun定义的函数中返回。
Java和Kotlin中泛型的协变、逆变和不变
https://www.jianshu.com/p/0c2948f7e656
Kotlin 新增了顶层声明的类别(顶层函数和顶层属性,无需放在类中的属性和方法)
组合优先于继承
继承破坏了封装性,父类必须暴露更多的细节让子类知道(比如使用 protected 访问权限),同时子类依赖于父类的实现,一旦父类改变,子类都会受影响。