Kotlin基礎教程の反射

2234 ワード

Kotlin基礎教程の反射
概要
反射は言語とライブラリの機能のセットであり、実行時刻にプログラム自体の情報を取得することができます。Kotlinでは、クラスの情報を送信するだけでなく、関数と属性の情報を取得することができます。つまり、実行時刻に関数または属性の名前とデータタイプを得ることは、単純な関数式またはインタラクティブなプログラミングによって実現され得る。
Javaプラットフォームでは、反射機能を使用するために必要な運行時のコンポーネントは、個別のJARファイルとして発行されています。これは反射機能を使用しないアプリケーションに対して、ライブラリのサイズを減らすためです。反射が必要なら、これをJarファイルに添付してください。
クラスの参照
基本的な反射機能はKtlin類の運転時の引用を取得することです。静的に知られているKtlin類の引用を得るには、クラスの額面値文法が使えます。

val c = MyClass::class
クラス参照はKClassタイプの値です。
Kotlinでは、クラスの情報を表すために、シリーズの定数を定義しています。
  • シンプルName:String?クラス名
  • qualifedName:String?クラスのフルネームは、パッケージ名を含む
  • です。
  • members:Collection
  • 関数参照
    使用:関数の参照を実現するためにオペレータが使用します。上級関数では、関数をパラメータとして使用していますが、関数パラメータを伝達する際には、一般的に使用されていた関数が引用されています。当時はまだよく理解されていませんでした。
    
    fun main(args: Array<String>) {
      val ages = listOf(18, 23, 17, 25)
      ages.filter(::isOld)
          .forEach(::println) //   :23,25
    }
    
    fun isOld(age: Int): Boolean = age > 20
    
    
    ここで、:isOddは(Int)->Boolean関数タイプの値です。
    例えば、String:toCharArayは、String上の拡張関数を指し、関数の種類は、String.()->Chararararrayである。
    属性の参照
    Kotlinでは、パケットレベルの属性は対象としてアクセスすることができます。この方法は、オペレータがKPropertyオブジェクトの種類を取得することができます。
    
    var x = 1
    fun main(args: Array<String>) {
      println(::x.get()) //      : "1"
      ::x.set(2)
      println(x) //      : "2"
    }
    
    
  • は、val属性に対して、KPropertyのget関数によって属性値を得ることができ、name属性によって属性名を得ることができます。
  • は、var属性に対して、返ってくる属性オブジェクトのタイプがKMuttablePropertyであり、get()とnameによってそのオブジェクトの属性値と属性名を取得するだけでなく、set()関数によってその属性値を設定することができる。
  • アクセスクラスのメンバー属性に対しては、限定符を使用する必要があります。返した属性オブジェクトの種類はKPropty 1
  • です。
    コンストラクタ参照
    コンストラクタ参照は、関数の種類のオブジェクトを使用する場所に使用できますが、この関数のタイプが受け入れられるパラメータはコンストラクタと同じであり、戻り値はコンストラクタの属するオブジェクトの例であるべきです。
    
     fun main(args: Array<String>) {
        var person = newPerson("Jone", 20, "SH", ::Person)
      }
    
      fun newPerson(name: String, age: Int, address: String, factory: (String, Int, String) -> Person) : Person{
        return factory(name, age, address)
      }
    
    
    読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。