图
我们给 train 赋值为 null , 报错然后就出现了, 有两个原因, 在 kotlin 中默认 val 为 immutable 类型, 所以我们不能为 val 类型从新赋值. 这个我们可以使用 var 关键字来定义变量 train . 第二个错误就是我们在 kotlin 不能将 null 赋值给变量.
图
但是在 Java 这样做, 赋值为 null 是没有问题的. 我们的 kotlin 和 java 又是那么友好. 是的这是有办法的.
图
我们定义一个方法, 接受 java 的 JavaMoney 类型作为参数. 我们可以在类后面添加一个 ?, 表示该类可以为 null.
图
如果 JavaMoney 可以为 null 值, 那么 money 就可能为 null. 如果 money 为 null,money.amount 就用报空指针异常. 我们有两种解决方案. 第一种比较传统. 就是判断 money 不为空时调用 money 的 amount.
图
?: 表示当前是否对象可以为空,!!: 表示当前对象不为空的情况下执行.
图
图
在 kotlin 中也支持高阶函数, 所谓高阶函数, 就是函数可以作为参数, 作为返回值来使用. kotlin 也支持高阶函数. 在函数 findEmails 中, 我们将一个函数作为参数传入 findEmails 这个函数中. 然后写个 TODO 函数. 这是一个有意思的, kotlin 特有的方法.
图
上图中为 kotlin 的 TODO 的源码, 返回值为 Nothing.
图
图
我们使用 Gson 这个库来实现对 JSON 文件读取以及解析. User 是一个数据类, 类似 java Bean 我们这里还使用到了 Role 这个枚举类.
图
之前在学习 Java8 和 JavaScript 的 stream 我们对数组进行遍历, 让后这里我们可以用 it 来表示每个遍历的对象, 调用 sortedBy 来根据 User 对象某个属性对集合进行排序, 最后调用 map 方法.
图
图
通过查看 to 源码, 我们看到其实他就是 pair 的糖果, 包装了一层.
图
这里我们需要得到第一个符合条件 User 就可以了, 所以调用 first().
图
在 JavaScript 的 es6 的新特性, 大家可能已经都了解到了 deconstruct 解构, 这里我们可以用 _(下划线) 来代替没有被使用的属性. 如图我们可以将 username 和 email 替换为 _ 来表示.
来源: http://www.jianshu.com/p/8cef3a55fd1d