Lombok: Apakah mungkin menggunakan toString dari kelas super tanpa "callSuper=true"?

Dibuat pada 14 Nov 2016  ·  3Komentar  ·  Sumber: projectlombok/lombok

<strong i="5">@ToString</strong>
class SuperClass {
   private <strong i="6">@Getter</strong> <strong i="7">@Setter</strong> int id;
   private <strong i="8">@Getter</strong> <strong i="9">@Setter</strong> String date;
}
@ToString(callSuper = true)
class MyClass extends SuperClass {
   private <strong i="12">@Getter</strong> <strong i="13">@Setter</strong> String field;
}

Memanggil toString dari MyClass menghasilkan output ini:

Kelasku(super=Kelas Super(id=1, tanggal=00/00/0000), bidang=tes)

Apakah mungkin untuk mendapatkan sesuatu seperti ini ...

KelasSaya(id=1, tanggal=00/00/0000, bidang=tes)

... secara langsung, tanpa memanipulasi string keluaran?


Bersulang!

Komentar yang paling membantu

Sekarang, mungkin saja menggunakan sesuatu seperti

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name="id")
    private int dummyId() {
        return id;
    }

   @ToString.Include(name="date")
    private int dummyDate() {
        return date;
    }

   private <strong i="6">@Getter</strong> <strong i="7">@Setter</strong> String field;
}

Ini jelas hanya dapat dilakukan untuk sejumlah kecil bidang (belum diuji).

Ide yang lebih baik mungkin

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name=" ")
    private int dummySuper() {
        return super.toString().replace(".*?\\(((?s:.*))\\)$", "$1");
    }

   private <strong i="12">@Getter</strong> <strong i="13">@Setter</strong> String field;
}
  • Menggunakan " " sebagai nama mungkin berfungsi atau tidak.
  • Dalam "ganti", saya berasumsi bahwa super.toString() (atau terlihat seperti) dihasilkan lombok.
  • Anda mendapatkan MyClass( id=1, date=00/00/0000, field=test) dengan satu kosong terlalu banyak.

Semua 3 komentar

Tidak juga; kami harus melakukan resolusi untuk melakukannya, dan kami tidak ingin pergi ke sana untuk dasar-dasar lombok, karena resolusi sangat rumit (masalah kinerja dan lebih banyak bug).

Sekarang, mungkin saja menggunakan sesuatu seperti

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name="id")
    private int dummyId() {
        return id;
    }

   @ToString.Include(name="date")
    private int dummyDate() {
        return date;
    }

   private <strong i="6">@Getter</strong> <strong i="7">@Setter</strong> String field;
}

Ini jelas hanya dapat dilakukan untuk sejumlah kecil bidang (belum diuji).

Ide yang lebih baik mungkin

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name=" ")
    private int dummySuper() {
        return super.toString().replace(".*?\\(((?s:.*))\\)$", "$1");
    }

   private <strong i="12">@Getter</strong> <strong i="13">@Setter</strong> String field;
}
  • Menggunakan " " sebagai nama mungkin berfungsi atau tidak.
  • Dalam "ganti", saya berasumsi bahwa super.toString() (atau terlihat seperti) dihasilkan lombok.
  • Anda mendapatkan MyClass( id=1, date=00/00/0000, field=test) dengan satu kosong terlalu banyak.
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

lludwa picture lludwa  ·  3Komentar

delverdev picture delverdev  ·  3Komentar

rdsubhas picture rdsubhas  ·  3Komentar

manuel-hegner picture manuel-hegner  ·  4Komentar

Maaartinus picture Maaartinus  ·  3Komentar