記事でわかること
KotlinとJavaが併存するプロジェクトでJavaのクラス内でKotlinのデータクラスを利用する方法を記載します。
背景
現在関わっているサーバーサイドのプロジェクトではJavaからKotlinへの移行を行っています。
新規クラスはKotlinで記述することで少しずつKotlinへの移行を進めています。
その際にKotlinのデータクラスをJavaから呼び出す際にどうすればいいのだろうと少し迷ったので、備忘のために記載します。
JavaでKotlinのデータクラスを利用するには
結論から言うと Kotlinのクラスを利用側のJavaクラスでimportして、普通にnew
することで利用できます。
data class User(
val id: Int,
val name: String,
val mailAddress: String
)
例えば、上記のKotlinのデータクラスをJavaで利用する場合には下記のように記述します。
import User;
public User createUser(Integer id, String name, String mailAddress) {
User user = new User(id, name, mailAddress);
return user;
}
Kotlinのデータクラスをデコンパイルしてみる
KotlinのデータクラスをJavaにデコンパイルしてみると、コンストラクタは下記のようになっています。
public User(int id, @NotNull String name, @NotNull String mailAddress) {
Intrinsics.checkNotNullParameter(name, "name");
Intrinsics.checkNotNullParameter(mailAddress, "mailAddress");
super();
this.id = id;
this.name = name;
this.mailAddress = mailAddress;
}
[ポイント]
- Intはprimitiveのintに、StringはそのままStringに変換されている
- JavaでもKotlinで記述したっとり必要な引数を取得するコンストラクタが生成されている
-
val
指定すると、パラメーターにはNotNull
の制約が付与される
まとめ
- KotlinのデータクラスをJavaで利用する場合は普通に
new
すればOK - コンストラクタにvalを指定した場合はKotlinの言語仕様通り、null 制約が付与されるので渡すパラメーターには注意が必要
- Kotlinのプリミティブな型(Int,String,Booleanなど)を利用している場合はJava側でどのクラス/プリミティブな型に変換されるのか確認したほうが良い
それでは素敵なKotlinライフを!