Kotlin For Android介绍

发展

Kotlin完全兼容JDK6,AndroidStudio3.0及IntelliJ等IDE工具提供集成开发环境支持。

Kotlin可用于多个平台(JVM/Android、JavaScript)。Kotlin标准库提供了所有平台可用的核心API,不同平台相关的扩展(例如JVM的java.io),以及可统一调用但工作方式不同的API(例如JVM和JavaScript的正则表达式)。

Kotlin语法

概念

Kotlin中,任何东西都对象,包括成员方法/属性等。所有类继承AnyAny不同于Java.lang.Object的一点是,除了hashCode(),toString(),equals()方法,Any没有其他成员。

对象

Byte(1: 字节)/Short(2)/Int(4)/Float(4)/Long(8)/Double(8)

=== 需要两个对象的值和引用地址完全相同
== 只需要两个对象的值相同

NaN : Not a Number

val(value, immutable),var(varibale, mutable)

空安全

避免空指针的黄金准则是,对于可为空的变量,编译器会强制开发者在使用前进行处理。

相近函数对比

let,apply,with,run函数对比 参考

《Kotlin For Android介绍》 Kotlin相近函数对比

属性

四种可见性:private,protected,internal,public. 默认public.

属性可以引用特定对象的实例方法

主构造函数跟随在类的声明后,不能包含任何代码。可使用init方法进行初始化。次构造函数使用constructor声明。没有new关键词

所有类和方法都是final,除非使用open声明。
子类可以用var属性覆盖父类的一个val属性,但不能用val覆盖var。

同伴对象和ObJect都可用作static访问。同伴类与类一起使用,一个类中只能有一个同伴对象。

Interface及Abstract

Kotlin中的Interface可以实现方法,子类可选择继承此方法。interface的属性不能拥有隐藏属性backing field,不能对属性进行初始化,而抽象类中的属性可以,抽象类可以使用非public修饰符和final成员。总之,虽然kotlin中的Interface更强大了,但是接口出发点是为了定义一个通用的协作方式,而抽象类是定义一个不完整的抽象父类。

泛型的替代方案

out实现了泛型的协变,生产者
in实现了泛型的逆变,消费者
数组对象是不型变的。

reified是具体化,作为kotlin的一个方法泛型关键字,它代表你可以在方法体内访问泛型指定的JVM对象。必须以inline内联方式声明这个方法才有效。参考

Flow控制流

if是一个符号,可返回一个值。
when可做符号也可以做语法。

Exceptions

Kotlin中所有exceptions继承Throwable,携带message属性并且不需要检查。

Android使用

Anko 库提供了UI构造及线程等实用的扩展函数。建议等一两年后,第三方Kotlin库及Android Studio支持性更趋丰富后再转用Kotlin开发。

Kotlin可完美兼容Android的Unit TestInstrumentation Test

与Java的区别

详细区别
  1. 区别于泛型及通配符的out/in关键词
    <? extends>实现了泛型的协变
    <? super>实现了泛型的逆变
  2. 高级的函数编程支持
    不仅支持Java引入的lambda及Stream库,还支持函数类型及函数引用。
  3. 对集合/空安全/POJO的语法糖
    提供全局的空安全的编译检查,避免出现空指针异常。
    可通过data/object/companion object提供POJO对象的不同需求。
  4. 其他功能
    @操作符提供了GOTO语法跳转功能的支持,在循环/嵌套引用中能方便获取目前对象及目前位置。kotlin能更快捷的定义POJO,单例,观察者,懒加载,委托。对于目前流行的对象编程提供语法糖。
Kotlin特有
  • Lambda 表达式 + 内联函数 = 高性能自定义控制结构
  • 扩展函数
  • 空安全
  • 智能类型转换
  • 字符串模板
  • 属性
  • 主构造函数
  • 一等公民的委托
  • 变量和属性类型的类型推断
  • 单例
  • 声明处型变 & 类型投影
  • 区间表达式
  • 操作符重载
  • 伴生对象
  • 数据类
  • 分离用于只读和可变集合的接口
  • 协程
Java特有

Java对-128到127的Integer对象进行缓存,当创建符合此范围的Integer对象时会复用。
字符串常量池存放的是对象引用,而不是对象。
Java中,对象都创建在堆内存中。
Java中,泛型是不型变的

感想

一开始觉得官方推荐Kotlin要耗费时间去学,后来就开始喜欢上这颗语法糖。
突然觉得Java太原始了。kotlin的使用对初学者和老鸟都十分友好。语法的使用不再是程序员的入门门槛,却也是进阶的门槛。对空安全的支持非常到位。

扩展阅读

From Java to Kotlin
Kotlin 资源大全 – 学 Kotlin 看这一篇教程就够了

    原文作者:liaowenhao
    原文地址: https://www.jianshu.com/p/48ff867c041b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞