Java 转 Kotlin 原来如此简单
程序员常用的 IDEA 插件:https://github.com/silently9527/Toolkit
微信公众号:贝塔学 Java
变量
Kotlin 声明变量的关键字有两个
val: 不可变引用,相当于 java 中 final 修饰的变量
var: 可变引用
举例:
在这个例子中,变量 name 明确指定了类型是 String,变量 age 没有指定类型,这两种方式都正确,Kotlin 的编译器可以根据初始化的值推断出 age 的类型,所以在定义变量的时候可以不用指定变量的类型
再看下面这个例子:
这里存在两个问题导致编译不通过:第一,由于变量会被改变,需要改成 var;第二,在第一次赋值的时候编译器推断出 age 的类型应该是 Int,在修改的是时候就不能被赋值 String
枚举
枚举的定义需要使用关键字 enum class
, Kotlin 中的枚举和 Java 一样可以拥有属性和构造方法
这里的枚举 Color 的构造方法有三个参数r,g,b
,如果参数没有传默认是 0,然后再构建对象的时候可以指定变量的名字赋值(在后面类相关的部分会再次出现);
定义了两个方法 sum,两种写法都支持
when
when 语句类似于 Java 中的 switch 语句,但用法会更多一些
与 java 中的 switch 只能支持枚举,数字,字符串,而 when 支持任意类型
上面的例子还可以改写成不带参数的写法,这种写法每个分支条件就是布尔表达式(类似于 java 中的 if-elseif)
迭代
while 的用法和 Java 相同
在 Kotlin 中引入了区间,var oneToTen=1..10
这个表示 1 到 10 的区间,这个区间是闭合的,也就是说包含 10
由于区间是闭合的, 包含了 10, 在实际情况下我们更常用是不包含, 可以使用until
输出结果: A,B,C,D,E,
上面的例子如果我们可以想要倒序输出,步长 2,可以是使用 downTo
, step
实现
下面我们想要迭代一个 List, 同时还需要访问 List 的 index, for 循环改如何写
迭代 map, 同时访问 key,value
in
还可以用来判断元素在集合和区间是否存在,println(1 in 1..10)
异常处理
在 Java 中需要区分受检异常和不受检异常, 比如 IO 操作的方法通过都会抛出 IOException, 应用程序必须要处理,这导致了很多模式代码, 所以在 Kotlin 中不在区分受检异常和不受检异常,无需在方法后面 trhow 异常.
另外 try-catch 语句依然可以像 if-else 语句一样作为一个表达式, 最后一行就是表达式的返回值
上面的代码运行时遇到了异常进入到了 catch 分支, 最后一行是 0, 所以 result 的结果就是 0
字符串
在 Java 中我们想要使用字符串模版是通过 String.format 来实现,接下来看 Kotlin 如何的字符串模版
从上面的我们可以看出 Kotlin 的模版确实要更简洁,直接使用$
来引用变量,如果想要在模版中输出 $字符,需要使用转义:\$
; 不仅如此,在模版中来可以写入一下逻辑判断
在 Java 中的String.split
方法的参数是正则表达式,所以在执行特殊的分隔符时主要转义, Kotlin 重载了这个方法
输出的结果
当我们需要使用正则表达式来分割是可以通过一下方式调用
这里使用了双斜杠转义操作, 也可以是三重引号来去掉转义,看起来会更加直接
原文链接: http://herman7z.site
最后(看完不点关注,你们想白嫖我吗)
文中或许会存在或多或少的不足、错误之处,有建议或者意见也非常欢迎大家在评论交流。
最后,写作不易,请不要白嫖我哟,希望朋友们可以点赞评论关注三连,因为这些就是我分享的全部动力来源🙏
版权声明: 本文为 InfoQ 作者【Silently9527】的原创文章。
原文链接:【http://xie.infoq.cn/article/0beb4dcf6a63ff0713201f78f】。文章转载请联系作者。
评论