第十章:註解與反射

註解

  1. 應用註解: 關鍵字@
    常用:@Deprecated 被廢棄, 可以使用replaceWith參數增強它。該註解可以傳入參數message, replaceWith, level。參數類型:基本數據類型、字符串、枚舉、類引用、其他的註解類以及前面這些類型的數組;
    注意:把一個類指定爲註解實參,在類名後加上::class ; 把另外一個註解指定爲一個實參,去掉註解名稱前面的@; 要把一個數組指定爲一個實參,使用arrayOf函數;把屬性當做註解,需要使用const來標註;

  2. 註解目標
    使用點目標聲明被用來說明要註解的元素。使用點目標被放在@符號和註解名稱之間,並用冒號和註解名稱隔開。
    在這裏插入圖片描述
    在這裏插入圖片描述
    任何應用到file目標的註解都必須放在文件的頂層,放在package指令之前。常用的@file:JvmName("")改變對應類的文件名。
    **Kotlin允許對任意的表達式應用註解,而不僅僅是類和函數的聲明及類型。**常用的@Suppress()用它來抑制被註解的表達式的上下文中的特定的編譯器警告。
    在這裏插入圖片描述

  3. 用註解來控制Java API
    @JvmName() 改變由kotlin生成的java方法或字段的名稱
    @JvmStatic() 能被用在對象聲明或者伴生對象的方法上,把他們暴露成Java的靜態方法
    @JvmOverloads 指導編譯器爲帶默認參數值的函數生成多個重載函數
    @JvmField 可以用於一個屬性,把這個屬性暴露成一個沒有訪問器的共有Java字段

  4. 使用註解定製序列化
    序列化:把對象轉換成可以存儲或者在網絡上傳輸的二進制或者文本的表示法。它的逆向過程叫做反序列化。
    聲明註解: annotation class , 注意:對於一個註解類的所有參數必須使用val,是強制的。 在聲明類前面加上annotation
    元註解:可以應用到註解類上的註解被叫做元註解 常用的@Target 指定註解使用的目標

    要聲明自己的元註解使用@Target(AnnotationTarget.ANNOTATION_CLASS)
    @Retention註解的作用:聲明註解的聲明週期,Kotlin默認在RUNNTIME保留
    ::class 作用:引用一個類
    在這裏插入圖片描述
    KClass是Java的java.lang.Class類型在Kotlin中的對應類型,保存Kotlin類的引用,out作用說明可以引用那些繼承Any的類,而不僅僅是Any類自己

反射

  1. 反射定義:一種在運行時動態地訪問對象屬性和方法的方式,而不需要事先確定這些屬性是什麼。

  2. 使用方式:

    • 標準的Java反射 java.lang.reflect
    • Kotlin反射API kotlin.reflect
  3. KClass類 Kotlin反射的主要入口, KClass對應java.lang.Class
    在這裏插入圖片描述
    運行時獲取一個對象的類:首先使用java.class屬性獲取它的Java類,等價於Java的java.lang.Object.getClass(),然後訪問該類的.kotlin擴展屬性.
    ::FunName 這個表達式的值是來自反射API的KFunction類的一個實例
    KCallable是函數和屬性的超接口,它聲明瞭call方法,允許你調用對應的函數或者對應屬性的getter
    KCallable.call()調用被引用的函數 KProperty調用該屬性的getter,獲取屬性值的方法get方法
    KFunctionN, KPropertyN N代表參數的數量 稱爲合成的編譯器生成類型
    例如:KFunction2聲明瞭operator fun invoke(p1: P1, p2 : P2) : R
    在這裏插入圖片描述
    使用實例:

    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章