kotlin與java

Kotlin簡介

Kotlin是一種針對Java 平臺的新編程語言。Kotlin簡潔、安全、務實,并且專注于與Java代碼的互操作性。它幾乎可以用在現(xiàn)在Java使用的任何地方:服務端開發(fā)、Android應用等等。Kotlin 可以很好地和所有現(xiàn)存的Java庫和框架一起工作,而且性能和Java旗鼓相當。

  • Kotlin 是靜態(tài)類型語言并支持類型推導,允許維護正確性與性能的同時保持源代碼的簡潔。
  • Kotlin 支持面向對象和函數(shù)式兩種編程風格,兩種風格可以隨意混合使用,通過頭等函數(shù)使更高級別的的抽象成為可能。
  • 與Java可互操作,這樣可以使學習曲線更平滑,項目新語言更新曲線更平滑。
  • Kotlin 是務實的、安全的、簡潔的。

被詬病的java空指針

在java問世的時候宣傳的一大亮點就是摒棄掉了C語言的指針,了解java的小伙伴都知道java的內(nèi)存數(shù)據(jù)結構中,對象存放在堆中而引用存放在棧中,想要獲取到對象實體,必須通過引用指向實際的對象內(nèi)存地址,如果這條聯(lián)系不在了,那么就會報空指針異常NullPointerException。
kotlin解決了這個問題,不能說是解決,而是有效的限制了這種問題的出現(xiàn)。

  • 可用類型(?)新增的一種數(shù)據(jù)類型,例如:
var value1 : String? = null //是合法的
var value2 : String = null //是不合法的,編譯不過的

kotlin編譯器認為value2是不可空的String類型,所以初始化和以后的賦值中不能為null,所以一個方法的參數(shù)是String類型,如果傳入值可能為null,編譯器會報錯,警告你要傳入不可為空的參數(shù)。另外:如果和java代碼混編的話,可能不會報錯,所以還是要注意。

  • 安全調(diào)用運算符(?.)
    這個運算符就厲害了,當你的變量的類型是可空類型,那么在調(diào)用內(nèi)部屬性或者方法的時候,必須使用?.運算符,例如:
value1?.length()

這條語句的含義是value1如果為空,則不執(zhí)行。如果是java代碼,會怎么做?

if(value1 != null){
  value1.length()
}

代碼中不可能所有的對象都要這樣去判空一下,那太令人作嘔了。有經(jīng)驗的程序員會知道代碼執(zhí)行到這里的時候該對象是否可能為空。但是,上了一些代碼異常跟蹤平臺,比方說bugly,你會發(fā)現(xiàn)線上版本在用戶手里運行的時候能出現(xiàn)好多無厘頭的空指針,完全顛覆你的自信心,所以kotlin真香。

能省則省,要的就是簡潔

舉例說明一下封裝類的創(chuàng)建代碼,java代碼

public class Person{
  private String name;
  private int age;
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
  public void setAge(int age){
    this.age = age;
  }
  public int getAge(){
    return age;
  }
}

kotlin代碼

data class Person(var name: String, var age: Int)

至于get、set方法kotlin代碼在編譯階段幫你生成,調(diào)用時也不需要get、set,直接對象打點調(diào)用屬性名稱。

高階函數(shù),回調(diào)接口不再是必需品

java代碼想要創(chuàng)造一個回調(diào)函數(shù),需要創(chuàng)建一個接口:

public interface OnClickListener{
  void onClick();
}

需要一個管理類:

public class ListenerManager{
  private OnClickListener mOnClickListener;
  public void setOnClickListener(OnClickListener onClickListener){
    this.mOnClickListener = onClickListener;
  }
  public OnClickListener getOnClickListener(){
    return mOnClickListener;
  }
}

需要一個實現(xiàn)類:

public class MyOnClickListener implement OnClickListener{

  @Override
  public void onClick(){
    // 回調(diào)函數(shù)中處理邏輯
  }
}

然后在自己的業(yè)務場景中創(chuàng)建MyOnClickListener對象,調(diào)用onClick方法,或者通過參數(shù)的形式進行異步邏輯實現(xiàn)。

public void getServerData(MyOnClickListener listener){
   // 獲取到數(shù)據(jù)之后調(diào)用
   listener.onClick();
}

obj.getServerData(new MyOnClickListener(){
    @Override
     public void onClick(){
      // 回調(diào)函數(shù)中處理邏輯
    }
  })

然而用kotlin的高階函數(shù)可以這么寫:

public fun getServerData(listener: ()-> Unit){
    // 獲取到數(shù)據(jù)之后調(diào)用
    listener.invoke()
}

obj.getServerData { 
    // 高階函數(shù)中處理邏輯
}

相比較java代碼而言省去了接口的創(chuàng)建,管理接口對象的管理類的創(chuàng)建,變得很簡單易用。等等

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容