Kotlin学习之旅(D8)-From Java to Kotlin

Kotlin学习之旅第八天

今天的主题是:From Java to Kotlin

前言

Kotlin学习之旅(D1)-学习计划&基本语法

Kotlin学习之旅(D2)-基本语法

Kotlin学习之旅(D3)-类与继承

Kotlin学习之旅(D4)-函数与Lambda表达式

Kotlin学习之旅(D5)-高级语法

Kotlin学习之旅(D6)-Kotlin Idioms part 1

Kotlin学习之旅(D7)-Kotlin Idioms part 2

学习资源

Kotlin官网在线学习课程(需要翻墙):Kotlin Koans

kotlin中文(不需要翻墙):Kotlin语言中文站

Github学习资源 : From Java To Kotlin

kotlin必备知识:

首先如果是有Java基础的童鞋,推荐直接从官网文档上手,可以快速学习Kotlin这门语言的特性和用法。

如果是零基础的童鞋,那么推荐看视频+看书,一般都是直接在youtube上搜索kotlin就可以找到很有有用的视频了,书籍的话推荐《Kotlin in Action》

这两天的任务比较轻松,因为From Java to Kotlin 其实在前面我们讲语法和习惯用法的时候,基本上都已经见过了,这里其实只是相当于再复习一遍,而且上面的 From Java To Kotlin已经很全了,我就把自己不太熟练的摘录下来。

常见区别

Null

Java

1
2
3
if(text != null){
int length = text.length();
}

Kotlin

1
2
3
val length = text?.length

val length = text!!.length // NullPointerException if text == null

?:可以为空,但是如果没做非空判断,在编译的时候会报错

!!.:可以为空,编译的时候也不会报错,但是运行的时候有可能会NPE

Strings II

Java

1
2
3
String text = "First Line\n" +
"Second Line\n" +
"Third Line";

Kotlin

1
2
3
4
5
val text = """
|First Line
|Second Line
|Third Line
""".trimMargin()

Kotlin里面通过 ''' 来表示多行字符串,通过 | 来表示换行

Bits Operations

Java

1
2
3
4
5
final int andResult  = a & b;
final int orResult = a | b;
final int xorResult = a ^ b;
final int rightShift = a >> 2;
final int leftShift = a << 2;

Kotlin

1
2
3
4
5
val andResult  = a and b
val orResult = a or b
val xorResult = a xor b
val rightShift = a shr 2
val leftShift = a shl 2

Java 和 Kotlin 的位操作符

Collections

Java

1
2
3
4
5
6
7
8
9
for (int number : numbers) {
System.out.println(number);
}

for (int number : numbers) {
if(number > 5) {
System.out.println(number);
}
}

Kotlin

1
2
3
4
5
6
numbers.forEach {
println(it)
}

numbers.filter { it > 5 }
.forEach { println(it) }

Kotlin通过 filter{x > 5} 来表示 Java里面的 if(x > 5) 这个条件语句的区别需要注意

Constructors

Java

1
2
3
4
5
6
7
8
9
10
public class Utils {

private Utils() {
// This utility class is not publicly instantiable
}

public static int getScore(int value) {
return 2 * value;
}
}

Kotlin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Utils private constructor() {
companion object {
fun getScore(value: Int): Int {
return 2 * value
}
}
}

// another way
object Utils {
fun getScore(value: Int): Int {
return 2 * value
}
}

Java:通过 静态方法 来实现工具类

Kotlin:一切皆是对象,通过 companion object / ojbect utils 来实现工具类

Class methods

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Utils {

private Utils() {
// This utility class is not publicly instantiable
}

public static int triple(int value) {
return 3 * value;
}

}

int result = Utils.triple(3);

Kotlin

1
2
3
4
5
fun Int.triple(): Int {
return this * 3
}

var result = 3.triple()

Java:通过static实现类方法

Kotlin:通过扩展函数实现类方法

enum

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public enum Direction {
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);

int direction;

Direction(int direction) {
this.direction = direction;
}

public int getDirection() {
return direction;
}
}

Kotlin

1
2
3
4
5
6
7
8
9
10
11
12
13
enum class Direction constructor(direction: Int) {
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);

var direction: Int = 0
private set

init {
this.direction = direction
}
}

总结

一开始以为From Java to Kotlin 要讲两天的,因为我是先大致浏览了一遍官方文档,然后做的学习计划,结果发现经过前面的学习,对Kotlin的语法掌握了的情况下,其实很多Java和kotlin之间的区别都已经很熟悉了,强烈推荐大家去看看 From Java To Kotlin,就当是一个复习/总结,加深对Kotlin语法的熟悉。

明天开始正式进入Kotlin in Android 的学习,这个才是我们Kotlin学习之旅的重点。

Day 8 - Learn Kotlin Trip, Completed.


本文结束啦感谢您的阅读