Kotlin學習(一) 初嘗試(Var變量與Val常量)

前言:

Kotlin裏面沒有new !!! Kotlin裏面沒有new !!! Kotlin裏面沒有new !!!
結尾不用寫;號

一.var與val

var 表明變量 具體使用:java

var a: Int? = null//定義可爲null
    var b: Any = Any()//定義類型爲Any(就是Object).不可爲null
    var c: String? = null//定義可爲null
    lateinit var d: String//定義類型爲String,延遲初始化,不能爲基本類型數據
複製代碼

val 表明常量 定義比較簡單,和java同樣.必須初始化賦值bash

val e:String ="val"
複製代碼

二get() 和set()

kotlin裏 變量定義默認是有get()和set()的,性能

var <propertyName>: <PropertyType> [= <property_initializer>]
      <getter>
      <setter>
複製代碼

上面這個看不懂也不要緊. 具體點測試

var data: Any = Any()
        get() {
  //這裏的field表明data,能夠理解爲臨時變量,用於表明訪問data,
  //由於直接return data的話,在kotlin data就表明get()方法,就死循環了..
            return field
        }
        set(value) {
            field = value//同理
        }
複製代碼

var和val的get set會有區別

很好理解 var是變量,因此有get和set方法 val是常量,因此只有get方法ui

具體使用

var data: Any = Any()
    fun test() {
        //至關於getData()
        var a = data
        HLog.i("a", a.toString())
        HLog.i("data", data.toString())

       //至關於setData()
        data = Any() 
        HLog.i("data", data.toString())
    }
複製代碼

測試結果: this

Paste_Image.png

三.變量的空引用檢查

####Kotlin 類型系統致力於消滅空引用!不容許聲明變量但不初始化!spa

很重要的一句話.說的也很明白 在這裏我糾結了1個多小時,思想沒轉過來!code

舉個例子:

###1.成員變量延遲初始化cdn

private Object data;
  public Object getData() {
        if (data==null){
            data = new Object();
        }
        return data;
  }
 public void setData(Object data) {
        this.data = data;
    }
複製代碼

這種代碼在java裏仍是常常能見到的,延遲初始化.調用的時候纔去建立 或是在沒有set的狀況下就get,防止報空,防止被設置爲null.初始化個默認值,對象

自動轉化成kotlin代碼是這樣的:

Paste_Image.png

報錯了!爲何會報錯?

Paste_Image.png

那麼聲明一下,在返回類型後面加個?,容許return null

Paste_Image.png

仔細想一想邏輯會發現有問題. data不可能爲null 由於調用後返回的一定不爲null.這裏爲了避免報錯卻聲明返回可能會null. 這就不合理了.

換種寫法

Paste_Image.png

這樣邏輯是對了,可是這樣卻很麻煩.我將類型改成List

Paste_Image.png

直接 data.xxx 的話會提示出錯. 必須調用getData()來操做.這樣就感受有點不和諧了.

我以爲這樣寫就行了

Paste_Image.png

由於使用kotlin通常不須要聲明get()和set()方法

固然,哪一種寫法好,看各自的愛好了.若是聲明的不是很耗性能的對象,我認爲 能夠直接初始化

四.lateinit 延遲初始化var

lateinit var data: Any
複製代碼

注意是var,不能延遲初始化val. 雖說是必須定義的時候就初始化,但仍是提供了一個標識,讓var能夠延遲初始化

Paste_Image.png
判null,會提示這是無用的代碼; 並且沒法重寫get set方法,我的以爲這點不太友好.

---------------------------------分割線---------------------------------------

您的喜歡與回覆是我最大的動力-_-

相關文章
相關標籤/搜索