![](/img/trans.png)
[英]What is parameters in constructor (context, attrs)? How I can create new object this class? Java and 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
有一些注意事項和缺點:
您總是必須檢查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() }
該變量不是final
,因此沒有什么可以阻止您在代碼中的某處執行此操作:
videoRecord = null
您必須在某處對其進行初始化,因此如果您有多種訪問videoRecord
方法, videoRecord
您首先必須對其進行初始化(如果尚未初始化),從而引入了不必要的冗余。
在 kotlin 中,變量的聲明與 java 不同,因為 kotlin 是空安全語言。 您必須聲明變量可為空。 只有這樣它的值才能為空。
您可以將其聲明如下
var videoRecord: VideoRecord? = null
要訪問可為空的值,您必須使用 !! 或者 ? 帶有變量名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.