Kotlin 類和屬性

image.png

前言


  • 面向?qū)ο缶幊桃巡皇鞘裁葱迈r概念,你也許非常熟悉 的抽象機制。Kotlin 這方面的概念你也許會感覺似曾相似,但是你會發(fā)現(xiàn)許多常見任務(wù)使用更少的代碼就能完成。

Person


  • 首先我們來看一個簡單的 JavaBean 類 Person,只有一個屬性 name

      public class Person {
          private final String name;
    
          public Person(String name) {
              this.name = name;
          }
    
          public String getName() {
              return name;
          }
      }
    
  • 這時,你大可以使用工具 Convert Java File to Kotlin File 來將 Java 代碼轉(zhuǎn)換成 Kotlin 代碼。

      class Person(val name: String)
    
  • 很簡單的一行代碼,這種類通常被叫做值對象,許多語言都提供簡明語法還聲明它們。

屬性


  • 在 Java 中數(shù)據(jù)實體通常都是一個私有字段保存數(shù)據(jù),并提供訪問器方法:一個 getter ,可能還有一個 setter 進行數(shù)據(jù)訪問及變更。這樣的組合一般被叫做屬性。

  • 在 Kotlin 中,聲明一個屬性和聲明一個變量一樣,使用 valvar 關(guān)鍵字,val 是只讀的,var 是可變的。

      class Person {
          val name: String             // 只讀屬性,生成一個簡單的 getter
          var isMarried: Boolean       // 可寫屬性,生成一個簡單的 getter 和 setter
      }
    
  • 基本上,Kotlin 中聲明屬性的時候,你就聲明了對應(yīng)的訪問器方法,只是簡單的獲取屬性、設(shè)置屬性,如果有需要,可以聲明自定義的訪問器。

      /* Java */
      Person person = new Person("Bob", true);
      System.out.println(person.getName()); // 調(diào)用訪問器方法
      System.out.println(person.isMerried());
      >> Bob
      >> true
    
      /* Kotlin */
      val person = Person("Bob", true)
      println(person.name)   // 可以直接訪問屬性,但調(diào)用的是 getter
      println(person.isMarried)
      >> Bob
      >> true
    

自定義訪問器


  • 如果你聲明了一個矩形,它能夠判斷自己是否是正方形。

  • Kotlin 中不需要一個單獨的字段來存儲這個信息,可以隨時通過檢查矩形的長寬是否相等來判斷。

      class Rectangle(val height: Int, val width: Int) {
          val isSquare: Boolean
              get() {  // 聲明自定義的 getter
                  return height == width
              }
      }
    
  • 對于不需要花括號的 getter 你也可以這樣寫:get() = height == width

  • KotlinTest 項目中的 DataBinding RootHandler 中有使用到。

      class RootHandler(private val listener: OnTitleClickListener): BaseObservable() {
          /** 標(biāo)記-是否顯示標(biāo)題欄 */
          @get:Bindable  // getter 使用 @Bindable 注解
          var showTitle: Boolean = false  // 屬性聲明
              set(showTitle) {  // setter
                  field = showTitle  // 使用 field 指代屬性
                  notifyPropertyChanged(BR.showTitle)  // DataBinding 更新布局
              }
          ... ...
      }
    

目錄和包


  • Koltin 中的目錄和包與 Java 中類似。
  • Kotlin 不區(qū)分導(dǎo)入的是類還是函數(shù),它可以使用 import 關(guān)鍵字導(dǎo)入任意類,也可以導(dǎo)入頂層函數(shù)。
  • Kotlin 中一個文件中可以有多個類,并且文件的名字可以隨意選擇。
  • 大多數(shù)情況下,遵循 Java 的目錄布局并根據(jù)包結(jié)構(gòu)把源碼放在目錄中是個很好的選擇,但是你也應(yīng)該毫不猶豫地把多個類放進同一個文件中,特別是那些很小的類(Koltin 中的類通常很?。?/li>

最后


  • 如果有什么疑問歡迎大家在評論區(qū)提問。
  • 筆者會給大家不斷帶來 Kotlin 相關(guān)知識,歡迎關(guān)注~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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