簡體   English   中英

如何在 Kotlin 中創建空類對象?

[英]How can I create null class object in Kotlin?

在java中,我們可以像這樣聲明一個空類對象

VideoRecord videoRecord;

之后,我們可以檢查它是否為空

if (videoRecord == null){
    videoRecord = new VideoRecord();
}

我是 Kotlin 的新手,我想在 Kotlin 中做同樣的事情。 我在下面試過這個代碼。

lateinit var videoRecord1:VideoRecord

if (videoRecord1 == null){
    videoRecord1 = VideoRecord()
}

但它給了我一個警告,比如條件videoRecord1 == null總是假的。 我怎樣才能在 Kotlin 中做同樣的事情?

var videoRecord: VideoRecord? = null

你可以像這樣初始化它的變量

可為空的參考: https : //kotlinlang.org/docs/reference/null-safety.html

根據您要實現的目標,例如延遲初始化,這可能比andika_kurniawan給出的答案更適合您:

val videoRecord: VideoRecord by lazy { VideoRecord() } 

這將在第一次訪問延遲初始化videoRecord

這種方式的優點是訪問videoRecord時不必檢查null ,因為它不能null 這顯着簡化了該變量的使用。 此外,您可以將videoRecord標記為val ,這意味着它是final ,因此不能被覆蓋。

@andika_kurniawan 展示的例子:

var videoRecord: VideoRecord? = null

有一些注意事項和缺點:

  1. 總是必須檢查videoRecord是否不為null (並且它變得乏味),請參閱此示例:

     if (videoRecord != null) { videoRecord.callAMethod() }

    上面的不行,因為videoRecord定義為nullable,所以需要使用!! 運算符告訴 kotlin 您確定該變量不為空:

     if (videoRecord != null) { videoRecord!!.callAMethod() }

    您當然可以使用其他習語,例如空安全運算符?.

     videoRecord?.callAMethod()

    或者已經提到的!! 運算符(當它為null時拋出異常)但這次沒有null檢查:

     videoRecord!!.callAMethod()

    你也可以使用局部變量,這簡化了使用(一點點):

     val videoRecord = videoRecord if (videoRecord != null) { videoRecord.callAMethod() }
  2. 該變量不是final ,因此沒有什么可以阻止您在代碼中的某處執行此操作:

     videoRecord = null
  3. 您必須在某處對其進行初始化,因此如果您有多種訪問videoRecord方法, videoRecord您首先必須對其進行初始化(如果尚未初始化),從而引入了不必要的冗余。

在 kotlin 中,變量的聲明與 java 不同,因為 kotlin 是空安全語言。 您必須聲明變量可為空。 只有這樣它的值才能為空。

您可以將其聲明如下

var videoRecord: VideoRecord? = null

要訪問可為空的值,您必須使用 !! 或者 ? 帶有變量名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM