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 访问权限),同时子类依赖于父类的实现,一旦父类改变,子类都会受影响。

results matching ""

    No results matching ""