欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-13 10:45:35
...

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

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

Kotlin

val length = text?.length

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

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

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

Strings II

Java

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

Kotlin

val text = """
        |First Line
        |Second Line
        |Third Line
""".trimMargin()

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

Bits Operations

Java

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

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

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

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

Kotlin

numbers.forEach {
    println(it)
}

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

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

Constructors

Java

public class Utils {

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

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

Kotlin

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

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

fun Int.triple(): Int {
  return this * 3
}

var result = 3.triple()

Java:通过static实现类方法

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

enum

Java

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

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.


相关标签: kotlin

上一篇: Java 泛型

下一篇: C# 泛型类