Kotlin @JvmFieldへのガイド
1概要
このチュートリアルでは、https://kotlinlang.org/[Kotlin]から
@ JvmField
アノテーションを調べます。
Kotlinにはクラスとプロパティへのアプローチがあり、これはJavaで使用されるアプローチとは異なります。
@ JvmField
アノテーションは、2つの言語間の互換性を達成することを可能にします。
2フィールド宣言
デフォルトでは、Kotlinクラスはフィールドを公開せず、代わりにプロパティを公開します。
この言語は自動的に値をフィールドの形で格納するプロパティへのバッキングフィールドを提供します。
class CompanionSample {
var quantity = 0
set(value) {
if(value >= 0) field = value
}
}
これは簡単な例ですが、IntelliJでKotlinのDecompiler([ツール]>[Kotlin]>[Kotlin Decompilerの表示])を使用すると、Javaでどのように見えるかがわかります。
public class JvmSample {
private int quantity;
//custom getter
public final void setQuantity(int value) {
if (value >= 0) {
this.quantity = value;
}
}
}
ただし、これはフィールドがまったくないという意味ではありません。必要な場合は特定のシナリオがあります。この場合、
@ JvmField
アノテーションを利用することができます。これは、プロパティにゲッターとセッターを生成しないようにコンパイラーに指示し、それを単純なJavaフィールドとして公開するように指示します。
Kotlinの例を見てみましょう。
class KotlinJvmSample {
@JvmField
val example = "Hello!"
}
そしてそのJavaは対応するものを逆コンパイルしました – 確かに、それはフィールドが標準のJavaの方法で公開されたことを証明します:
public class KotlinJvmSample {
@NotNull
public final String example = "Hello!";
}
3静的変数
注釈が便利になるもう1つの例は、nameオブジェクトまたはcompanionオブジェクトで宣言されたプロパティが静的バッキングフィールドを持つときです。
public class Sample {
public static final int MAX__LIMIT = 20;
}
class Sample {
companion object {
@JvmField val MAX__LIMIT = 20
}
}
4.使用法の例外
これまで、注釈を使用できる状況について説明しましたが、いくつかの制限があります。
注釈を使用できない状況がいくつかあります。
-
私有財産
-
open
、
override
、および
const
修飾子を持つプロパティ -
委任プロパティ
5結論
この簡単な記事では、Kotlinの
@ JvmField
アノテーションのさまざまな使い方について説明しました。
これらすべての例とコードスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/core-kotlin[GitHubプロジェクト]にあります – これはMavenプロジェクトなので、簡単にできます。そのままインポートして実行します。