1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Kotlin/Java] KotlinのデータクラスをJava で利用するには

Posted at

記事でわかること

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ライフを!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?