[Android]コトリン::class.JAvaは何ですか?


Retrofitを介してAPIインタフェースを呼び出し可能なオブジェクトに変換する過程で、当然のように使用される:素子に好奇心が生じる.
retrofit.create(UserApi::class.java)コトリンなのになぜか.JAva,:何を表しますか.

返信


:::シンボルは返信を表します。


コードを記述するとき、実行時にコンパイルされたバイトコードには、私が記述したコードが見つかりません.
すなわち,実行時にプログラムのクラスを調べるための技術である.
  • 類返信className:class
  • インスタンスによるクラス返信instanceName:class
  • クラス返信を直接読み込むか、インスタンスでインポートできます.返信は、以下に示すように、転送オブジェクトによって参照できます.val kClass: KClass<out className> = className::class次に、kClassという名前の参照オブジェクトによって、クラスが抽象クラスなのかデータクラスなのか、またはコンストラクション関数とメンバー変数に関する情報を得ることができます.
    ex) kClass.isAbstract kClass.memeberProperties

    だから。JAvaは何ですか?


    *コートリンで使われているクラスはJavaで使われているクラスとは違います!


    Javaにあります.classはClassを返し、CottlinでKclassを返します.しかし、次の画像から見ると、リフレッシュするcreateにはjavaクラスが必要です.

    でも心配する必要はありません.
    @Suppress("UPPER_BOUND_VIOLATED")
    public val <T> KClass<T>.java: Class<T>
        @JvmName("getJavaClass")
        get() = (this as ClassBasedDeclarationContainer).jClass as Class<T>
    以上の方法はKclassの拡張関数である.Javaを使用してjavaクラスタイプを返します.

    つまり。Javaを使用してKclassからjavaクラス値を取得できます。


    まとめると,javaクラス値を変形create()関数のパラメータとしてjavaクラスに渡すためにcortline replicationのjavaクラスタイプが得られるといえる.
    コメントブログ
    https://sabarada.tistory.com/190
    https://yoon-dailylife.tistory.com/46