《From Java To Kotlin》-Kotlin与Java的简单对比

本文对比了Java和Kotlin在日志打印、常量变量、空声明、类型判断与转换、字符串操作、集合操作、循环、方法定义等方面的区别。Kotlin提供了更简洁的语法,如空安全、智能转换、范围检查和扩展函数等特性,提高了代码的可读性和效率。
摘要由CSDN通过智能技术生成

前言:

原文来自https://github.com/MindorksOpenSource/from-java-to-kotlin

本文也只是简单比较kotlin与java的不同之处,实际学习kotlin还是去官网学习比较好。我个人学习的一个网站贴出来:Kotlin中文网

打印日志

  • Java

System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");
  • Kotlin

print("Amit Shekhar")
println("Amit Shekhar")

常量与变量

  • Java

String name = "Amit Shekhar";
final String name = "Amit Shekhar";
  • Kotlin

var name = "Amit Shekhar"
val name = "Amit Shekhar"

null声明

  • Java

final String name = null;
String otherName;
otherName = null;
  • Kotlin
val name : String? = null
var otherName : String?
otherName = null

空判断

  • Java

if(text != null){
  int length = text.length();
}
  • Kotlin
val length = text?.length

字符串拼接

  • Java

String firstName = "Amit";
String lastName = "Shekhar";
String message = "My name is: " + firstName + " " + lastName;
  • Kotlin
val firstName = "Amit"
val lastName = "Shekhar"
val message = "My name is: $firstName $lastName"

换行

  • Java

String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";
  • Kotlin
val text = """
        |First Line
        |Second Line
        |Third Line
        """.trimMargin()

三元表达式

  • Java

String text = x > 5 ? "x > 5" : "x <= 5";
  • Kotlin
val text = if (x > 5)
              "x > 5"
           else "x <= 5"

类型判断和转换 (声明式)

  • Java

if(object instanceof Car){
}
Car car = (Car) object;
  • Kotlin
if (object is Car) {
}
var car = object as Car

类型判断和转换 (隐式)

  • Java

if(object instanceof Car){
   Car car = (Car) object;
}
  • Kotlin
if (object is Car) {
   var car = object // smart casting
}

多重条件

  • Java

if(score >= 0 && score <= 300 ){}
  • Kotlin
if (score in 0..300) { }

更灵活的case语句

  • Java

int score = // some score;
String grade;
switch (score) {
 case 10:
 case 9:
  grade = "Excellent";
  break;
 case 8:
 case 7:
 case 6:
  grade = "Good";
  break;
 case 5:
 case 4:
  grade = "Ok";
  break;
 case 3:
 case 2:
 case 1:
  grade = "Fail";
  break;
 default:
     grade = "Fail";    
}
  • Kotlin
var score = // some score
var grade = when (score) {
 9, 10 -> "Excellent" 
 in 6..8 -> "Good"
 4, 5 -> "Ok"
 in 1..3 -> "Fail"
 else -> "Fail"
}

for循环

  • Java
for (int i = 1; i <= 10 ; i++) { }

for (int i = 1; i <= 10 ; i+=2) { }

for (String item : collection) { }

for (Map.Entry<String, String> entry: map.entrySet()) { }
  • Kotlin
for (i in 1..10) { }

for (i in 1..10 step 2) {}

for (item in collection) {}

for ((key, value) in map) {}

更方便的集合操作

  • Java

final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);

final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, "Amit");
map.put(2, "Ali");
map.put(3, "Mindorks");
  • Kotlin
val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Amit",
                     2 to "Ali",
                     3 to "Mindorks")

遍历

  • Java
for (Car car : cars) {
  System.out.println(car.speed);
}

for (Car car : cars) {
  if(cars.speed > 100) {
    System.out.println(car.speed);
  }
}
  • Kotlin
cars.forEach {
    println(it.speed)
}

cars.filter  { it.speed > 100 }
      .forEach { println(it.speed)}

方法定义

  • Java

void doSomething() {
   // logic here
}
  • Kotlin
fun doSomething() {
   // logic here
}

带返回值的方法

  • Java

int getScore() {
   // logic here
   return score;
}
  • Kotlin
fun getScore(): Int {
   // logic here
   return score
}

无结束符号;

  • Java

int getScore(int value) {
    // logic here
    return 2 * value;
}
  • Kotlin
fun getScore(value: Int): Int {
   // logic here
   return 2 * value
}

constructor 构造器

  • 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
        }
        
    }
}

// other way is also there

object Utils {

    fun getScore(value: Int): Int {
        return 2 * value
    }

}

Get Set 构造器

  • Java
public class Developer {

    private String name;
    private int age;

    public Developer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Developer developer = (Developer) o;

        if (age != developer.age) return false;
        return name != null ? name.equals(developer.name) : developer.name == null;

    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Developer{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • Kotlin
data class Developer(val name: String, val age: Int)

扩展函数

  • 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()

License

   Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值