Kotlin 類和屬性

image.png

前言


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

Person


  • 首先我們來(lái)看一個(gè)簡(jiǎn)單的 JavaBean 類 Person,只有一個(gè)屬性 name

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

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

屬性


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

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

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

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

自定義訪問(wèn)器


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

  • Kotlin 中不需要一個(gè)單獨(dú)的字段來(lái)存儲(chǔ)這個(gè)信息,可以隨時(shí)通過(guò)檢查矩形的長(zhǎng)寬是否相等來(lái)判斷。

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

  • KotlinTest 項(xiàng)目中的 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 中一個(gè)文件中可以有多個(gè)類,并且文件的名字可以隨意選擇。
  • 大多數(shù)情況下,遵循 Java 的目錄布局并根據(jù)包結(jié)構(gòu)把源碼放在目錄中是個(gè)很好的選擇,但是你也應(yīng)該毫不猶豫地把多個(gè)類放進(jìn)同一個(gè)文件中,特別是那些很小的類(Koltin 中的類通常很小)。

最后


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

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

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