JavaRush /Blog Java /Random-MS /Cara mengatasi kaedah ToString() dengan berkesan mengguna...
dio
Tahap
Москва

Cara mengatasi kaedah ToString() dengan berkesan menggunakan ToStringBuilder.

Diterbitkan dalam kumpulan
ToStringBuilder ialah kelas pembantu yang disediakan oleh perpustakaan apache commons lang . ToStringBuilder ialah kelas utiliti yang disediakan oleh perpustakaan Apache Commons Lang. Ia menyediakan kawalan yang lengkap dan lebih baik ke atas data objek dan jumlah yang harus dikeluarkan oleh kaedah toString(), serta dalam format apa. ToStringBuilder membantu anda mengelak daripada menulis banyak kod dengan menghapuskan keperluan untuk mengatasi kaedah ToString() dalam kelas kanak-kanak. ToStringBuilder boleh digunakan untuk mencipta jenis templat untuk memanfaatkan sepenuhnya keupayaan yang disediakannya. Untuk memasukkan Commons-Lang dalam projek anda, tambahkan kebergantungan berikut pada fail konfigurasi Maven anda. Dalam artikel ini, saya akan memberikan beberapa contoh contoh penggunaan yang boleh dianggap sebagai amalan terbaik untuk mengatasi kaedah ToString() dalam kelas aplikasi anda yang seterusnya. Untuk menunjukkan kemungkinan berbeza menggunakan ToStringBuilder untuk membina kaedah toString() dalam senario yang berbeza, saya akan mencipta tiga model: AbstractUser.java, WebUser.java dan GuestUser.java. commons-lang commons-lang 2.5
AbstractUser.java
package com.howtodoinjava.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import com.howtodoinjava.style.CustomToStringStyle; public abstract class AbstractUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String firstName; private String lastName; private String age; //Setterss and getters }
WebUser.java
public class WebUser extends AbstractUser { private static final long serialVersionUID = 1L; private Date lastLoggedIn; public Date getLastLoggedIn() { return lastLoggedIn; } public void setLastLoggedIn(Date lastLoggedIn) { this.lastLoggedIn = lastLoggedIn; } }
GuestUser.java
public class GuestUser extends WebUser { private static final long serialVersionUID = 1L; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
Pelbagai kes penggunaan
1) kaedah toString() dalam kelas super digunakan oleh semua kelas kanak-kanak.
Anda boleh mengatasi kaedah toString() dalam kelas objek peringkat atas, i.e. dalam kes kami AbstractUser.java. Kaedah ini digunakan oleh semua kelas kanak-kanak melainkan ia mengandungi versi kaedah toString() mereka sendiri. @Override public String toString() { return ToStringBuilder.reflectionToString(this); } Kaedah ToString() di atas mampu memberikan semua maklumat yang tersedia tentang kelas semasa, ia juga akan berfungsi dalam subkelas melainkan subkelas mengatasi kaedah ToString(). package com.howtodoinjava; import java.util.Date; import com.howtodoinjava.model.GuestUser; import com.howtodoinjava.model.WebUser; public class ToStringDemoUsage { public static void main(String[] args) { GuestUser guest = getGuestUser(); System.out.println(guest); } public static GuestUser getGuestUser() { GuestUser user = new GuestUser(); user.setId(100); user.setFirstName("Lokesh"); user.setLastName("Gupta"); user.setAge("30"); user.setLastLoggedIn(new Date()); user.setLocation("New Delhi"); return user; } } Output: com.howtodoinjava.model.GuestUser@d1f24bb[location=New Delhi,lastLoggedIn=Mon Jun 03 13:31:05 IST 2013,id=100,firstName=Lokesh,lastName=Gupta,age=30]
2) Pemformatan tersuai untuk sebarang jenis, seperti Data
Anda boleh menggunakan format tersuai pada mana-mana medan dalam kaedah ToString. Contoh pemformatan tersuai ditunjukkan di bawah: package com.howtodoinjava.style; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.builder.ToStringStyle; public class CustomToStringStyle extends ToStringStyle { private static final long serialVersionUID = 1L; protected void appendDetail(StringBuffer buffer, String fieldName, Object value) { if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd").format(value); } buffer.append(value); } } Untuk menggunakan pemformatan, letakkannya dalam kaedah seperti ini: @Override public String toString() { return ToStringBuilder.reflectionToString(this, new CustomToStringStyle()); } Output: com.howtodoinjava.model.GuestUser@7910769b[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30]
3) Gunakan maklumat daripada kelas super dalam subkelas dengan panggilan kaedah yang mudah
Jika anda ingin mengatasi ToString() dalam kelas kanak-kanak untuk menambah sesuatu pada maklumat yang diterima daripada kelas super, lakukan seperti ini: public class WebUser extends AbstractUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("lastLoggedIn", lastLoggedIn).toString(); } } Output: com.howtodoinjava.model.GuestUser@22aed3a5[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30,CustomMessage=I have been added additionally]
4) Penggunaan maklumat hanya sehingga tahap tertentu hierarki pewarisan
Katakan dalam sesetengah kelas kanak-kanak anda perlu mengembangkan medan semua kelas super, anda boleh memasukkan maklumat sehingga tahap tertentu hierarki warisan dengan cara berikut: public class GuestUser extends WebUser { @Override public String toString() { return ToStringBuilder.reflectionToString(this,new CustomToStringStyle(),true,WebUser.class); } } Output: com.howtodoinjava.model.GuestUser@18dd7404[location=New Delhi,lastLoggedIn=2013-06-03]
5) Paparkan maklumat yang anda mahu sahaja
Kadangkala anda tidak mahu memasukkan semua medan kelas dalam kaedah ToString(). Kemudian anda boleh melakukannya seperti ini: public abstract class AbstractUser implements Serializable { //Other code @Override public String toString() { return new ToStringBuilder(this) .append("firstName", firstName) .append("lastName", lastName) .append("age", age).toString(); } } public class GuestUser extends WebUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("location", location).toString(); } } Output: com.howtodoinjava.model.GuestUser@6483dae1[firstName=Lokesh,lastName=Gupta,age=30,location=New Delhi] Anda boleh memuat turun kod sumber contoh di atas dari pautan ini. Muat turun sumber Artikel asal: Cara mengatasi toString() dengan berkesan dengan ToStringBuilder Translated
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION