JavaRush /Blog Java /Random-VI /10 mẹo ghi đè phương thức toString() trong Java (Phần 2)
Ku6ep
Mức độ

10 mẹo ghi đè phương thức toString() trong Java (Phần 2)

Xuất bản trong nhóm

Các ví dụ về toString trong Java

Chúng tôi sẽ sử dụng lớp sau để minh họa ví dụ toString của chúng tôi cho Netbeans, Eclipse và tiện ích ToStringBuilder của Apache.

/** * Java программа, демонстрирующая How переопределить метод toString() в Java. * Эта Java программа показывает How вы можете использовать IDE типа Netbeans or Eclipse * и открытую библиотеку типа Apache commons ToStringBuilder для * переопределения toString в Java. * @author Javarevisited.blogspot.com */ public class Country { private String name; private String capital; private long population; private Date independenceDay; public Country(String name){ this.name = name; } public String getName(){ return name; } public void setName(String name) {this.name = name;} public String getCapital() {return capital;} public void setCapital(String capital) {this.capital = capital;} public Date getIndependenceDay() {return independenceDay;} public void setIndependenceDay(Date independenceDay) {this.independenceDay = independenceDay;} public long getPopulation() { return population; } public void setPopulation(long population) {this.population = population; } @Override public String toString() { return "Country{" + "capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + '}'; } public void setIndependenceDay(String date) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { this.independenceDay = format.parse(date); } catch (ParseException ex) { Logger.getLogger(Country.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { Country India = new Country("India"); India.setCapital("New Delhi"); India.setIndependenceDay("15/07/1947"); India.setPopulation(1200000000); System.out.println(India); } }

Phương thức toString được tạo bởi Netbeans IDE


Phương thức toString do Netbeans IDE tạo ra tạo ra kết quả đầu ra sau cho lớp được xác định ở trên:

Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}

Nếu nhìn vào kết quả trên, bạn sẽ thấy Netbeans không tạo ngày được định dạng cho bạn: thay vào đó, nó đang gọi phương thức toString() của lớp java.util.Date

Phương thức toString() được tạo bởi Rclise IDE


Theo mặc định, Eclipse tạo phương thức toString sau:

@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }

Bạn có thể tạo mã cho phương thức toString trong Eclipse bằng cách nhấp vào Nguồn --> Tạo toString(). Nó cũng cung cấp một số khả năng, chẳng hạn như chọn kiểu mã, nghĩa là sử dụng toán hạng nối hoặc StringBuilder , v.v. Dưới đây là kết quả đầu ra của phương thức toString() mà chúng ta vừa tạo trong Eclipse:

Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]

Sử dụng ToStringBuilder để ghi đè phương thức toString() của Java

Cùng với nhiều lớp hữu ích như PropertyUtils , EqualsBuilder hay HashCodeBuilder, Apache cũng cung cấp ToStringBuilder có thể tạo mã để xuất ra phương thức toString() theo nhiều kiểu khác nhau. Hãy xem đầu ra của phương thức toString trông như thế nào theo kiểu đơn giản và nhiều dòng: Kiểu đơn giản:

India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947

Kiểu nhiều dòng:

test.Country@f0eed6[
 name=India
 capital=New Delhi
 population=1200000000
 independenceDay=Fri Aug 15 00:00:00 VET 1947
 ]

NO_FIELD_NAMES_STYLE (kiểu không có tên trường)

test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]

SHORT_PREFIX_STYLE (kiểu tiền tố ngắn)

Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

ToStringStyle.DEFAULT_STYLE (kiểu mặc định)

test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

Một thư viện mã nguồn mở tương tự của Google, Guava cũng cung cấp một API tiện lợi để tạo mã cho phương thức toString trong Java.

Khi phương thức toString được gọi trong Java

toString là một phương thức khá cụ thể và được gọi từ nhiều phương thức JavaAPI như println(), printf() , ghi nhật ký, câu lệnh khẳng định , trình gỡ lỗi IDE, khi in các bộ sưu tập và khi ghép nối. Nếu một lớp con không ghi đè toString() thì việc triển khai mặc định được xác định trong lớp Object sẽ được gọi. Nhiều nhà phát triển sử dụng các API ghi nhật ký như Log4J hoặc java.util.Logger để xuất nhật ký và thường bỏ sót Object ở đây.

logger.info("Customer not found:" + customer)

và nếu Khách hàng không ghi đè toString và xuất thông tin quan trọng như customerId, customerName, v.v. khi đó sẽ khá khó khăn để chẩn đoán vấn đề. Đây là lý do tại sao việc ghi đè toString trong Java luôn có giá trị. Chúng ta hãy xem xét một số lợi ích nếu chúng ta làm điều này.

Lợi ích của việc ghi đè phương thức toString

  1. Như đã thảo luận ở trên, toString được ghi đè chính xác sẽ giúp gỡ lỗi bằng cách in ra thông tin quan trọng.
  2. Nếu một đối tượng quan trọng được lưu trữ trong một bộ sưu tập thì việc in bộ sưu tập sẽ gọi phương thức toString của đối tượng được lưu trữ, phương thức này có thể in ra những thông tin quan trọng. Một ví dụ kinh điển về phương thức toString không bị ghi đè là Array trong Java, phương thức này in kết quả của việc triển khai mặc định thay vì nội dung của mảng. Mặc dù có một số cách để in nội dung của một mảng bằng Arrays.toString() và những cách tương tự; nhưng vì Array là một đối tượng Java nên sẽ tốt hơn nhiều nếu nó biết cách tự in, giống như các lớp tập hợp như List hoặc Set .

Đây chỉ là một số lợi ích mà bạn sẽ nhận được bằng cách triển khai hoặc ghi đè phương thức toString trong Java , còn nhiều lợi ích khác mà bạn sẽ nhận được và tự mình tìm hiểu. Tôi hy vọng những mẹo này sẽ giúp bạn tận dụng tối đa việc triển khai toString của mình. Hãy cho chúng tôi biết nếu bạn biết bất kỳ cách làm việc độc đáo nào với toString giúp bạn trong các ứng dụng Java của mình.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION