狠狠撸

狠狠撸Share a Scribd company logo
尝辞尘产辞办のススメ
アジェンダ
? はじめに
? Javaの冗長コード
? Lombokを使った冗長コードの排除
? Lombokを使ってBuilderを追加
? Maven依存関係
? IntelliJのPlugin
? まとめ
はじめに
? ここでは、Javaの冗長コードを排除するLombokを説明する
https://projectlombok.org/
Javaの冗長コード
? Javaの昔から抱える問題に「冗長コード」がある。
たとえば、以下のようなフィールドがあったとする。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
フィールド宣言はprivateが原則
Javaの冗長コード (1つ目)
? フィールドはprivate宣言が原則なので、
そのフィールドにアクセスするsetter/getterを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
/** 商品コードの取得 */
public Integer getProductCode() {
return productCode
}
/** 商品コードの設定 */
public void setProductCode(Integer productCode ) {
this.productCode = productCode
}
}
フィールドごとに
setter/getterを書く
Javaの冗長コード (2つ目)
? コンストラクタを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
/** デフォルトコンストラクタ */
public Product() {
}
/** フィールド初期化をするコンストラクタ */
public Product(Integer productCode, String productName) {
this.productCode = productCode;
this.productName = productName;
}
}
デフォルトコンストラクタ以外に、
フィールド初期化用コンストラクタを書く
Javaの冗長コード (3つ目)
? クラスの文字列表現を返すtoStringメソッドを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
/** クラスの文字列表現 */
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(“productCode:”).append(productCode);
sb.append(“ productName:”).append(productName);
return sb.toString();
}
}
フィールドの内容を
文字列にして返却する
Javaの冗長コード (4つ目)
? 各フィールドが等価かを返すequalsメソッドを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
/** 等価かを返す */
public boolean equals(Object o) {
if (!(o instanceof Product)) {
return false;
}
Product p = (Product)o;
if ((this.productCode != null && p.productCode == null) ||
(this.productCode == null && p.productCode != null) ||
??? 以下略
同じクラスかのチェック
フィールド1つずつ、
nullチェック、値チェックをする
Javaの冗長コード (5つ目)
? 各フィールドの値に応じたハッシュ値を返す
hashCodeメソッドを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
/** ハッシュ価を返す */
public int hashCode() {
??? 以下略
Lombokを使った冗長コードの排除
? これら冗長コードを、Lombokを使って排除する。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
Lombokを使った冗長コードの排除
? getter/setter、toString、
equals、hashCodeメソッドの追加
/** productテーブルのEntity */
@Data
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
@Dataアノテーションを付ける
Lombokを使った冗長コードの排除
? デフォルトコンストラクタの追加
/** productテーブルのEntity */
@Data
@NoArgsConstructor
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
@NoArgsConstructor
アノテーションを付ける
Lombokを使った冗長コードの排除
? フィールド初期化用コンストラクタの追加
/** productテーブルのEntity */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
@ AllArgsConstructor
アノテーションを付ける
Lombokを使った冗長コードの排除
? 以上
/** productテーブルのEntity */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
Lombokを使ってBuilderを追加
? Bulderを追加する。
/** productテーブルのEntity */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Product {
/** 商品コード */
private Integer productCode;
/** 商品名 */
private String productName;
}
Lombokを使ってBuilderを追加
? Bulderを使う。
Product product = Product.builder()
.productCode(1)
.productName(“ガム”)
.build(); 任意のフィールドのみを初期化した
インスタンスを作成できる
Maven依存関係
? Maven依存関係に下記を追加する。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
IntelliJのPlugin
? IntelliJのPluginを追加する。
設定画面を開いて
「Plugins」を選択 キーワードに
「lombok」を入力
リストに出ない場合は
「Browse」をクリック
IntelliJのPlugin
? IntelliJのPluginを追加する。
「Lombok Plugin」を選択
ダウンロードと
インストールをする
IntelliJのPlugin
? IntelliJのPluginを追加する。
IntelliJを
再起動して完了
まとめ
? Lombokを使って定型的なコードをなるべく排除し、
それで浮いた時間を使って本来やるべき実装に集中しましょう。

More Related Content

尝辞尘产辞办のススメ