Javaプロジェクトロンボク

プロジェクトロムボクは、Javaプロジェクトで冗長なコードを減らすための非常に便利なツールです。

問題の述べ方

java project lombok
package com.askrakesh.java.manage_boilerplate;

import java.time.LocalDate;

public class Person {

	String firstName;
	String lastName;
	LocalDate dateOfBirth;

	public Person(String firstName, String lastName, LocalDate dateOfBirth) {
		super();
		this.firstName = firstName;
		this.lastName = lastName;
		this.dateOfBirth = dateOfBirth;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public LocalDate getDateOfBirth() {
		return dateOfBirth;
	}

	public void setDateOfBirth(LocalDate dateOfBirth) {
		this.dateOfBirth = dateOfBirth;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((dateOfBirth == null) ? 0 : dateOfBirth.hashCode());
		result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
		result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (dateOfBirth == null) {
			if (other.dateOfBirth != null)
				return false;
		} else if (!dateOfBirth.equals(other.dateOfBirth))
			return false;
		if (firstName == null) {
			if (other.firstName != null)
				return false;
		} else if (!firstName.equals(other.firstName))
			return false;
		if (lastName == null) {
			if (other.lastName != null)
				return false;
		} else if (!lastName.equals(other.lastName))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Person [firstName=" + firstName + ", lastName=" + lastName + "dateOfBirth=" + dateOfBirth + "]";
	}

}

クラスは、インスタンス変数のためのゲッターセッター、equalsおよびhashCodeメソッドの実装、全てのフィールドのコンストラクター、およびtoStringメソッドの実装を持つべきです。このクラスは現時点ではビジネスロジックがなく、それでも80行以上のコードです。これは狂っています。

プロジェクト ロムボク

プロジェクトLombokは、エディタやビルドツールに自動的に組み込まれ、ボイラープレートのコードを削減するのを支援するJavaライブラリです。まず、Lombokプロジェクトのセットアップ方法を見てみましょう。

JavaプロジェクトLombokはどのように機能しますか?

ランボクには、コンパイル時に処理されるコード内で使用できるさまざまなアノテーションがあり、使用されたアノテーションに基づいて適切なコードの展開が行われます。ランボクは、ビュー時にのみコードの削減を行い、コンパイル後のバイトコードにはすべてのボイラープレートが注入されます。これにより、コードベースを小さく、クリーンで読みやすく、メンテナンスしやすく保つことができます。

プロジェクトLombokのMaven

プロジェクトにLombokを追加するのは簡単です。以下の依存関係をMavenプロジェクトのpom.xmlファイルに追加するだけです。

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.16.20</version>
</dependency>

IDE(Eclipse)にLombokプラグインを追加する

「Windowsのインストール手順を以下に示します:」

    1. https://projectlombok.org/download から jar ファイルをダウンロードするか、Maven ビルドでダウンロードした jar を使用します。

 

    1. ターミナルで以下のコマンドを実行してください: java -jar lombok.jar

 

    このコマンドは、下記の画像のようなウィンドウを表示します。インストーラを実行して終了し、Eclipse を再起動してください。
java lombok install eclipse
    1. 以下のように日本語で書き換えます(一つのオプションのみ):

lombok.jarをEclipse.app/Contents/MacOSディレクトリにコピーします。
Eclipse.app/Contents/Eclipse/eclipse.iniファイルの末尾に-javaagent:lombok.jarを追加します。
Eclipseを再起動し、プロジェクトのプロパティで「アノテーション処理」を有効化します。下の画像に示すように。

LombokのEclipseアウトラインでのプレビュー

project lombok eclipse getter setter annotations

LombokのJavaバイトコードにおけるpeek

project lombok annotations runtime

プロジェクトロンボクのアノテーション

プロジェクトLombokは、さまざまなシナリオでボイラープレートのコードを減らすための多くのアノテーションを提供しています。以下にいくつかを紹介しましょう。

    1. コンストラクタアノテーション

 

    1. @AllArgsConstructor

 

    1. public class PersonLombok {

 

    1. @NonNull String firstName;

 

    1. String lastName;

 

    1. LocalDate dateOfBirth;

 

    1. public static void main(String[] args) {

 

    1. new PersonLombok(null, “Kumar”, LocalDate.now());

 

    1. }

 

    1. }

上記のコードは次のものをクラスに注入します:

@AllArgsConstructorによるすべての引数を持つコンストラクタ
Constructorに引数を渡すときに@NonNullによるnullチェック。@NonNullアノテーションは、引数をメソッドのパラメーターとして渡す場合にも使用できます。

以下はプログラムの実行結果です。@RequiredArgsConstructorは、特別な処理が必要な各フィールドごとに1つのパラメータを持つコンストラクタを生成します。初期化されていないすべての非終了フィールドにはパラメータが割り当てられ、また、非終了であるが初期化されていない@NonNullフィールドにもパラメータが割り当てられます。

Getter/Setter アノテーション
これらのアノテーションは、フィールドレベルまたはクラスレベルで使用することができます。細かい制御をしたい場合はフィールドレベルで使用します。クラスレベルで使用すると、すべての getter/setter が作成されます。前述のクラスで作業しましょう。
@AllArgsConstructor
@Getter
@Setter
public class PersonLombok {
String firstName;
String lastName;
LocalDate dateOfBirth;
}

equals、hashCode、toString アノテーション
クラスを作成する際には、hashCode() メソッドと equals() メソッドをオーバーライドすることが推奨されます。Lombokでは、@EqualsAndHashCode アノテーションを使用して、equals() メソッドと hashCode() メソッドのコードを注入することができます。さらに、@ToString アノテーションは、toString() の実装を提供します。以下を見てみましょう:
@AllArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
@ToString
public class PersonLombok {
String firstName;
String lastName;
LocalDate dateOfBirth;
}

以上のように、Lombokのアノテーションを使用して、ボイラープレートコードを使用せずにPersonクラスを作成することができました。しかし、さらに良くなります。上記のクラスで使用されるすべてのアノテーションを@Dataで置き換えて、同じ機能を得ることができます。

デザインパターンベースのアノテーション
@Builderを使用すると、ビルダーパターンを使用してクラスをインスタンス化するために必要なコードを自動生成できます。
@Builder
public class Employee {
String firstName;
String lastName;
LocalDate dateOfBirth;

public static void main(String[] args) {
Employee emp = new EmployeeBuilder().firstName(“Rakesh”)
.lastName(“Kumar”)
.dateOfBirth(LocalDate.now())
.build();
}
}

@Delegateは、使用されているフィールドに対して呼び出しを転送するデリゲートメソッドを生成します。 “継承よりもコンポジションをお勧めする” とは言え、これはアダプターパターンと似たボイラープレートコードを作成します。Lombokは、この機能を実装する際に Groovy の同じ名前のアノテーションからヒントを得ました。実装を見てみましょう:
@RequiredArgsConstructor
public class AdapterImpl implements Adapter {
@Delegate
private final Adaptee instance;

public static void main(String[] args) {
AdapterImpl impl = new AdapterImpl(new Adaptee());
impl.display();
}
}

interface Adapter {
public void display();
}

class Adaptee {
public void display() {
System.out.println(“In Adaptee.display()”);
}
}

Lombokは、すべてのアノテーションにおいて詳細な制御機能を提供しています。

ボイラープレート: Javaアーキテクトのみなさんは聞いていますか?

はい、そうです。他の言語とは異なり、Javaは古いバージョンのJavaで動作している既存のコードを壊さないように、言語のアップグレードに最大限の注意を払っています。これ自体が膨大な仕事であり、軽視することはできません。既に、言語にはより良い型推論の機能を変更し、開発しています。Java 10で計画されている重要な機能の一つは、ローカル変数の型推論です。この機能は、ボイラープレートコードの管理に関するものではなく、むしろ動的型付けを追加する役割が大きいですが、ボイラープレートコードを管理するための小さな進歩と言えるでしょう。

要約

ボイラープレートコードの削減は、より読みやすさを向上させ、コードの量が少ないほどエラーも少なくなります。プロジェクトLombokは、ほとんどの主要な組織で広く使用されています。私たちはあなたに最も有用なLombokの機能を提供しました。ぜひ試してみてください。ソースコード:このチュートリアルで使用された完全なソースコードをダウンロードするために、私のGithubリンクを訪問できます。

コメントを残す 0

Your email address will not be published. Required fields are marked *