Lombok or data class
● JavaではLombokを使用していた
● Kotlinにはdata classという、自動でequals,
hashCodeメソッドを作ってくれる機能がある
data class User(
val name: String,
val sex: Sex,
val age: Int,
val prefectureCode: Int
)
@Value
@Builder
@Wither
public class User {
@NonNull String name;
@NonNull Sex sex;
int age;
int prefectureCode;
}
Slide 50
Slide 50 text
Lombok or data class
● Kotlinでは、Builderパターンなどの代わりに名前付
き引数を用いる
User.builder()
.name("oboenikui")
.sex(Sex.MAN)
.age(25)
.prefectureCode(12)
.build();
val user = User(
name = "oboenikui",
sex = Sex.MAN,
age = 25,
prefectureCode = 12
)
Slide 51
Slide 51 text
Lombok or data class
● Kotlinでは、Builderパターンなどの代わりに名前付
き引数を用いる
user.withAge(
user.getAge() + 1
);
user.copy (
age = user.age + 1
)
Slide 52
Slide 52 text
Javaからdata classの呼び出し
val user = User(
name = "oboenikui",
sex = Sex.MAN,
age = 25,
prefectureCode = 12
)
User user = new User(
"Takaki Hoshikawa",
Sex.MAN,
25,
12
);
年齢?
県コード?
ビルダーや名前付き引数の機能がないので
コンストラクタなどに渡す変数がわかりにくい
その他
User.builder()
// .name("oboenikui")
.sex(Sex.MAN)
.age(25)
.prefectureCode(12)
.build();
val user = User(
// name = "oboenikui",
sex = Sex.MAN,
age = 25,
prefectureCode = 12
)
引数が足りないので
シンタックスエラー
build()実行時にエラー
Builderパターンはdata classに比べて厳密にならない
Slide 56
Slide 56 text
data classとLombokの使用方針
● 他のクラスより慎重にKotlin化する
○ 多くの箇所で生成するものは後回しにする
○ data class化したら、使っているクラスも合わせてKotlin
化
○ 利用するwitherのみ定義する
○ JavaのUTで使う場合はコメントを入れる
data class User(
/* 略 */
) {
fun withAge(age: Int): User {
return copy(age = age)
}
}
Slide 57
Slide 57 text
data classとLombokの使用方針
● 他のクラスより慎重にKotlin化する
○ 多くの箇所で生成するものは後回しにする
○ data class化したら、使っているクラスも合わせてKotlin
化
○ 利用するwitherのみ定義する
○ JavaのUTで使う場合はコメントを入れる
User testUser = new User(
"Takaki Hoshikawa", // name
Sex.MAN, // sex
25, // age
12 // prefectureCode
);
Slide 58
Slide 58 text
data classとLombokの使用方針
● Lombokを使うモジュールを隔離 / Delombok
○ マルチモジュール化でビルド速度改善も期待できる
○ Lombokクラスからはdata classを利用できない
module A
(w/ Lombok)
module B
(data class)
main module
&
依存方向
モジュール隔離
Slide 59
Slide 59 text
data classとLombokの使用方針
● Lombokを使うモジュールを隔離 / Delombok
○ マルチモジュール化でビルド速度改善も期待できる
○ Lombokクラスからはdata classを利用できない
Delombok
@Value
@Builder
@Wither
public class User {
@NonNull String name;
@NonNull Sex sex;
int age;
int prefectureCode;
}
public class User {
/* 略 */
public String getName() {
return name;
}
/* 略 */
}