包结构

Java 语言规定类要放到和包结构匹配的文件夹目录结构中,而 kotlin 允许把多个类放到同一个文件中,文件名也可以任意选择。kotlin 也没有对磁盘上源文件的布局强加任何限制,包层级结构不需要遵循目录层级结构 ,但最好还是遵循 Java 的目录布局并根据包结构把源码文件放到相应的目录中

作者:叶志陈 链接:https://juejin.im/post/5def05f45188251222736db8 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

变量与数据类型

在 Java 中,大部分的变量是可变的(非 final 的),意味着任何可以访问到这个变量的代码都可以去修改它。而在 kotlin 中,变量可以分为 可变变量(var) 和 不可变变量(val) 两类 声明变量的关键字有两个:

  • val(value / varible+final)——不可变引用。使用 val 声明的变量不能在初始化之后再次赋值,对应的是 Java 中的 final 变量
  • var(variable)——可变引用。var 变量的值可以被改变,对应的是 Java 中的非 final 变量

不可变变量在赋值之后就不能再去改变它的状态了,因此不可变变量可以说是线程安全的,因为它们无法改变,所有线程访问到的对象都是同一个,因此也不需要去做访问控制。开发者应当尽可能地使用不可变变量,这样可以让代码更加接近函数式编程风格
与 Java 不同,kotlin 并不区分基本数据类型和它的包装类,在 kotlin 中一切都是对象,可以在任何变量上调用其成员函数和属性。kotlin 没有像 Java 中那样的原始基本类型,但 byte、char、integer、float 或者 boolean 等类型仍然有保留,但是全部都作为对象存在

Any 和 Any?

  • Any 类型是 kotlin 所有非空类型的超类型,包括像 Int 这样的基本数据类型
  • 如果想要使变量可以存储包括 null 在内的所有可能的值,则需要使用 Any?

    Unit

    kotlin 中的 Unit 类型类似于 Java 中的 void,可以用于函数没有返回值时的情况