JavaRush /Blog Java /Random-VI /Cách ghi đè phương thức ToString() một cách hiệu quả bằng...
dio
Mức độ
Москва

Cách ghi đè phương thức ToString() một cách hiệu quả bằng ToStringBuilder.

Xuất bản trong nhóm
ToStringBuilder là một lớp trợ giúp được cung cấp bởi thư viện Apache commons lang . ToStringBuilder là một lớp tiện ích được cung cấp bởi các thư viện Apache Commons Lang. Nó cung cấp khả năng kiểm soát đầy đủ và tốt hơn đối với dữ liệu đối tượng nào và số lượng dữ liệu sẽ được xuất ra bằng phương thức toString(), cũng như ở định dạng nào. ToStringBuilder giúp bạn tránh phải viết nhiều mã bằng cách loại bỏ nhu cầu ghi đè phương thức ToString() trong các lớp con. ToStringBuilder có thể được sử dụng để tạo các loại mẫu nhằm tận dụng tối đa các khả năng mà nó cung cấp. Để đưa Commons-Lang vào dự án của bạn, hãy thêm các phần phụ thuộc sau vào tệp cấu hình Maven của bạn. Trong bài viết này, tôi sẽ đưa ra một số ví dụ sử dụng mẫu có thể được coi là phương pháp hay nhất để ghi đè phương thức ToString() trong các lớp của ứng dụng tiếp theo của bạn. Để chứng minh các khả năng khác nhau của việc sử dụng ToStringBuilder nhằm xây dựng phương thức toString() trong các tình huống khác nhau, tôi sẽ tạo ba mô hình: Tóm tắtUser.java, WebUser.java và GuestUser.java. commons-lang commons-lang 2.5
Tóm tắtUser.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; } }
KháchUser.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; } }
Các trường hợp sử dụng khác nhau
1) phương thức toString() trong siêu lớp được tất cả các lớp con sử dụng.
Bạn có thể ghi đè phương thức toString() trong lớp đối tượng cấp cao nhất, tức là trong trường hợp của chúng tôi là Tóm tắtUser.java. Phương thức này được sử dụng bởi tất cả các lớp con trừ khi chúng chứa phiên bản toString() của riêng chúng. @Override public String toString() { return ToStringBuilder.reflectionToString(this); } Phương thức ToString() ở trên có khả năng cung cấp tất cả thông tin có sẵn về lớp hiện tại, nó cũng sẽ hoạt động trong các lớp con trừ khi lớp con ghi đè phương thức 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) Định dạng tùy chỉnh thuộc bất kỳ loại nào, như Dữ liệu
Bạn có thể áp dụng định dạng tùy chỉnh cho bất kỳ trường nào trong phương thức ToString. Một ví dụ về định dạng tùy chỉnh được hiển thị bên dưới: 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); } } Để sử dụng định dạng, hãy đặt nó vào một phương thức như sau: @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) Sử dụng thông tin từ siêu lớp trong lớp con với lệnh gọi phương thức dễ dàng
Nếu bạn muốn ghi đè ToString() trong một lớp con để thêm nội dung nào đó vào thông tin nhận được từ siêu lớp, hãy làm như sau: 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) Chỉ sử dụng thông tin ở một mức nhất định trong hệ thống phân cấp kế thừa
Giả sử trong một số lớp con bạn cần mở rộng các trường của tất cả các siêu lớp, bạn có thể đưa thông tin lên đến một mức nhất định của hệ thống phân cấp kế thừa theo cách sau: 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) Chỉ hiển thị thông tin bạn muốn
Đôi khi bạn không muốn đưa tất cả các trường của một lớp vào phương thức ToString(). Sau đó, bạn có thể làm như thế này: 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] Bạn có thể tải xuống mã nguồn của các ví dụ trên từ liên kết này. Nguồn tải Bài viết gốc: Cách ghi đè toString() hiệu quả bằng ToStringBuilder Translated
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION