1. Project Lombok
  2. Delombok

Dalam tutorial sebelum-sebelum ini, saya ada memperkenalkan beberapa library Java antaranya Guice, Vavr, dan Guava. Semua library tersebut boleh dikategorikan sebagai convenience library.

Convenience bermaksud ‘kemudahan’. Jadi, convenience library bermaksud library yang memudahkan kita untuk program menggunakan Java.

Kebanyakan programmer tidak suka menggunakan Java kerana perlu menulis banyak benda hanya untuk melakukan benda yang simple. Oleh itu, beberapa library dibina bagi mengurangkan bilangan code yang perlu ditulis. Pada pendapat saya, semakin kurang code yang perlu ditulis semakin kurang kesilapan yang akan berlaku kerana manusia mudah melakukan kecuaian.

Antara convenience library yang saya sudah perkenalkan:

  • Google Guava - Selain immutable collections, ada kemudahan lain yang ada dalam library Guava. Anda boleh lihat documentation di GitHub.

  • Google Guice - Jika kita tidak menggunakan framework untuk membuat dependency injection, kita perlu tulis sendiri class untuk injection.

  • Vavr - Kepada sesiapa yang ada pengalaman menggunakan Java 8 akan tahu syntax yang baru masih ada kelemahannya. Jadi Vavr memudahkan lagi penggunaan syntax Java 8. Sangat digalakkan kepada yang minat functional programming tetapi terpaksa menggunakan Java.

Sekarang saya akan perkenalkan satu lagi convenience library yang betul-betul akan mengurangkan bilangan code Java, iaitu Project Lombok.

Project Lombok

Lombok ialah library untuk menghasilkan constructor, getter, setter, toString(), hashCode() dan sebagainya hanya dengan menggunakan annotation. Lombok akan generate code yang diperlukan sebelum Java compile program kita.

Untuk menggunakan Lombok, tambah dependency di pom.xml (Maven):

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>

Jika anda menggunakan IDE seperti IntelliJ, anda boleh download plugin untuk Lombok supaya IDE tersebut faham annotation Lombok. Rujuk documentation Project Lombok.

Katakanlah kita perlu membuat class untuk menyimpan semua maklumat mengenai Pengguna seperti nama, umur, jantina, alamat, email, telefon, no akaun bank, dan sebagainya, field tersebut akan kelihatan seperti ini:

import java.sql.Timestamp;

public class Pengguna {
    private String nama;
    private int umur;
    private String jantina;
    private String alamat1;
    private String alamat2;
    private String email;
    private String telefonBimbit;
    private String telefonRumah;
    private String namaBank;
    private String noAkaunBank;
    private String noAkaunKwsp;
    private Timestamp waktuDaftar;
    private Timestamp waktuKemaskini;
}

Cuba bayangkan berapa banyak getter dan setter yang perlu ditulis hanya untuk class ini.

Untuk menggunakan Lombok, tambah sahaja annotation. Contoh untuk menghasilkan getter, setter, dan toString(), anda hanya perlu menambah annotation @Data. Untuk menghasilkan constructor, tambah @AllArgsConstructor. Contoh seperti berikut:

import lombok.AllArgsConstructor;
import lombok.Data;

import java.sql.Timestamp;

@Data
@AllArgsConstructor
public class Pengguna {
    private String nama;
    private int umur;
    private String jantina;
    private String alamat1;
    private String alamat2;
    private String email;
    private String telefonBimbit;
    private String telefonRumah;
    private String namaBank;
    private String noAkaunBank;
    private String noAkaunKwsp;
    private Timestamp waktuDaftar;
    private Timestamp waktuKemaskini;
}

dan segala-galanya sudah siap.

Untuk test class ini, kita boleh cuba seperti ini:

import java.sql.Timestamp;

import static java.time.Instant.now;

public class Main {
    public static void main(final String[] args) {
        final Pengguna kassim = new Pengguna(
                "Kassim",
                25,
                "Lelaki",
                "123, Jalan 1",
                "Kampung Dusun",
                "[email protected]",
                "012-1234567",
                "01-1234567",
                "CIMB Bank",
                "123456ABC",
                "ABC123456",
                Timestamp.from(now()),
                null);

        System.out.println(kassim);

        kassim.setUmur(26);

        System.out.println(kassim);
    }
}

Delombok

Jika anda ingin melihat bagaimana Lombok generate code untuk sesuatu class, anda boleh menggunakan Delombok.

Jika anda menggunakan IntelliJ, anda boleh klik kanan pada annotation Lombok, kemudian Refactor > Delombok, dan pilih annotation yang anda mahu Delombok-kan.

Feature ini juga boleh digunakan jika team anda tidak pandai atau enggan menggunakan Lombok.