Saya ingin tahu apakah mungkin untuk mempersingkat fungsi overloading dengan Lombok. Pada dasarnya saya ingin mempersingkat ini.

public setUserDetails() {
    setUserDetails(null, null, null, null);
}

public setUserDetails(String firstName) {
    setUserDetails(firstName, null, null, null);
}

public setUserDetails(String firstName, String lastName) {
    setUserDetails(firstName, lastName, null, null);
}

public setUserDetails(String firstName, String lastName, String address) {
    setUserDetails(firstName, lastName, address, null);
}

public setUserDetails(String firstName, String lastName, String address, String phoneNumber) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.address = address;
    this.phoneNumber = phoneNumber;
}

Menjadi sesuatu seperti:

@CreateFunctionOverloads
public setUserDetails(String firstName, String lastName, String address, String phoneNumber) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.address = address;
    this.phoneNumber = phoneNumber;
}
0
user3509528 12 Mei 2021, 01:53

1 menjawab

Jawaban Terbaik

Tidak, tetapi API Anda sepertinya akan sangat rawan kesalahan untuk digunakan, jadi mungkin itu hal yang baik.

Masalah dengan 5 parameter yang semuanya string adalah saya dapat menyebutnya seperti ini dan itu akan dikompilasi dengan baik

foo.setUserDetails("Smith", "Michael", "address", "phoneNum");

Apakah kamu melihat masalahnya?

Saya mengganti argumen pertama dan kedua

Ini adalah jenis hal yang Anda akan menghabiskan berjam-jam mencoba men-debug hanya untuk merasa seperti orang idiot ketika Anda akhirnya menyadarinya. Saya tahu karena itu terjadi pada saya.

Jadi saya akan meninggalkan ide Anda. Ada cara yang lebih baik untuk membuat objek dengan bidang opsional.

Anda dapat menggunakan @With yang membuat salinan objek baru yang tidak dapat diubah

new User().withFirstName("Michael").withLastName("Smith")

Atau Anda dapat menggunakan @Builder yang membuat satu instance builder yang dapat diubah dan kemudian instance nyata dari objek saat Anda memanggil build.

User.builder().firstName("Michael").lastName("Smith").build()
3
Michael 11 Mei 2021, 23:05