2017-07-13 7 views
1

JavaファイルをKotlinファイルに変換した後、クラスファイルにコンパイルしました。結果のクラスは元のJavaクラスファイルよりも大きいです。 Kotlinクラスファイルでは、すべてのクラスでメタデータが見つかりました。なぜKotlinはこのメタデータを保存しますか?なぜKotlinはMetaDataをKotlinクラスファイルに保持していますか?

+0

[kotlin.MetaDataに保持されているデータの形式はどこに文書化されていますか?](https://stackoverflow.com/questions/36816521/is-the-format-of-the-data-held-in -kotlin-metadata-documentsed-anywhere) –

+0

ありがとうございます。しかし、私はまだMeatadataが実行時に役立つかどうか疑問に思います。@ PixelElephant – TonyChou

答えて

1

Kotlinのコードのいくつかは、純粋なJavaバイトコード(例えば、NULL値可否、一次コンストラクタ、internal可視性、lateinit修飾子、プロパティ委譲など)で表現することはできません。代わりに、それらはシリアライズされ、メタデータとしてクラスに格納されます。

KotlinライブラリのJARディストリビューションを使用する場合、コンパイラはこれらのKotlin固有属性を検出するためにメタデータを解析し、利用可能なすべての機能を持つKotlinアーティファクトとしてライブラリを使用します。

実行時に、これらの属性を再構成して反映させるために、KotlinリフレクションAPIのkotlin-reflectがメタデータを使用します。

+0

ありがとうございました! googleの提案として、kotlinはAndroid開発のより多くの人口になるだろう。しかし、kotlinクラスファイルのサイズは、通常のJavaクラスファイルのサイズの約2倍です。したがって、kotlin apkはますます大きくなります。私はJetbrainsとGoogleにそれを修正する方法を知らない。 @hotkey – TonyChou

関連する問題