Phương thức Java toString
toString
Phương thức trong Java được sử dụng để cung cấp thông tin rõ ràng và đầy đủ về một đối tượng ( Object
) ở dạng con người có thể đọc được. Ghi đè phương thức thích hợp toString
có thể giúp ghi nhật ký và gỡ lỗi chương trình Java bằng cách cung cấp thông tin quan trọng và có giá trị. Vì toString()
nó được định nghĩa trong java.lang.Object
một lớp và việc triển khai mặc định của nó không cung cấp nhiều thông tin nên cách tốt nhất là ghi đè phương thức này trong lớp con. Trong thực tế, nếu bạn đang tạo một lớp quan trọng hoặc chung của loại Order
hoặc Trade
, Employee
hãy luôn ghi đè bằng , hashCode , so sánh và toString
các phương thức trong Java. Theo mặc định, việc triển khai toString
tạo ra kết quả ở dạng , package.class@hashCode
ví dụ như trong ví dụ của chúng tôi, phương thức lớp sẽ in test.Country@18e2b22 trong đó 18e2b22 là mã băm của đối tượng ở dạng thập lục phân, nếu bạn gọi phương thức hashCode thì nó sẽ trả về 260943370 là số thập phân tương đương với 18e2b22. Thông tin này không đặc biệt hữu ích khi tìm kiếm một vấn đề. Hãy xem một ví dụ thực tế khi bạn cần tìm sự cố trong kết nối mạng của mình, trong trường hợp bạn muốn biết máy chủ và cổng nào mà hệ thống của bạn đang cố gắng kết nối và nếu hoặc chỉ in thông tin mặc định, nó sẽ là không thể tưởng tượng được vấn đề thực sự, nhưng với việc triển khai được ghi đè, chúng có thể cung cấp thông tin hữu ích như tên máy chủ và số cổng. Trong hướng dẫn Java này, chúng tôi sẽ đưa ra một số mẹo về ghi đè phương thức bằng các ví dụ về mã. toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
Cách ghi đè phương thức toString trong Java:
In ngày được định dạng (tức là ngày/tháng/năm) thay vì giá trị thô. Đây là một gợi ý rất hữu ích khi ghi đè một phương thức JavatoString
. toString()
Lớp thông thường java.util.Date
không xuất ra ngày được định dạng và bao gồm nhiều chi tiết không phải lúc nào cũng cần thiết. Nếu bạn đang sử dụng một phần DateFormat , tức là. dd-MM-yy trong ứng dụng của mình thì bạn chắc chắn sẽ muốn xem định dạng này thay vì định dạng mặc định. IDE thường không tạo ra đầu ra được định dạng Date
và đây là việc bạn cần phải tự làm, nhưng nó đáng giá. Đọc Cách in ngày ở định dạng ddMMyy trong Java để biết chi tiết về định dạng Date
trong Java. Bạn cũng có thể sử dụng lớp SimpleDataFormat hoặc thư viện thời gian Ngày Joda cho việc này.
Ghi lại định dạng toString
Nếu phương thức của bạntoString()
không xuất dữ liệu dưới dạng trường=giá trị thì bạn nên ghi lại định dạng đầu ra toString
, đặc biệt đối với các đối tượng quan trọng như Nhân viên hoặc Sinh viên. Ví dụ: nếu một phương thức toString()
lớp Работник(Employee)
in " John-101-Sales-9846387321 " thì cách tốt nhất là chỉ định định dạng là "name-id-department-contact", nhưng đồng thời không cho phép khách hàng nhận được thông tin từ phương thức toString()
, bạn phải luôn cung cấp các phương thức thích hợp để truy xuất dữ liệu, chẳng hạn như getName()
, getId()
, getContact()
v.v., vì thông tin thu được từ toString()
biểu diễn đối tượng rất mong manh và dễ bị lỗi, do đó máy khách phải luôn có đường dẫn rõ ràng để lấy thông tin thông tin.
Sử dụng StringBuilder để soạn kết quả đầu ra của toString()
Nếu bạn đang viết mã cho một phương thứctoString()
trong Java thì hãy sử dụng StringBuilder để thêm các thuộc tính riêng lẻ. Nếu bạn đang sử dụng một IDE như Eclipse , Netbeans hoặc IntelliJ thì sử dụng StringBuilder
phương thức and append()
thay vì toán tử + để soạn thảo toString
cũng là một cách tốt. Theo mặc định, cả Eclipse và Netbeans đều tạo toString
bằng toán tử nối.
Sử dụng chú thích @Override
Sử dụng@Override
ghi đè phương thức trong Java là một trong những cách thực hành tốt nhất trong ngôn ngữ này. Nhưng gợi ý này không quan trọng bằng trong trường hợp ghi đè the equals()
và các phương thức compareTo()
, vì việc nạp chồng thay vì ghi đè có thể tạo ra nhiều lỗi tinh vi hơn khó tính toán. Trong mọi trường hợp, tốt hơn là sử dụng chú thích @Overrride
.
In nội dung của một mảng thay vì in đối tượng mảng
Mảng là một đối tượng trong Java nhưng nó không ghi đè một phương thứctoString
và khi bạn in một mảng, định dạng đầu ra mặc định không hữu ích lắm vì chúng ta muốn xem nội dung của mảng. Nhân tiện, đây là một lý do khác tại sao mảng char[] lại thích hợp hơn String để lưu trữ dữ liệu nhạy cảm như mật khẩu. Hãy dành thời gian để xem liệu việc in nội dung của một mảng có giúp ích cho khách hàng của bạn hay không và nếu điều đó hợp lý thì hãy in nội dung của mảng thay vì chính đối tượng đó. Vì lý do hiệu suất, tốt hơn nên sử dụng HashSet như Collection
vậy để lưu trữ các đối tượng khác. ArrayList
Array
Mẹo thưởng
Một số mẹo bổ sung khác về ghi đè phương thứctoString
trong Java.
-
In đầu ra
toString
thành nhiều dòng hoặc một dòng dựa trên độ dài của nó. -
Bao gồm các tên lớp đủ điều kiện trong biểu diễn
toString
, nói cách khácpackage.class
để tránh bất kỳ sự hiểu lầm nào. -
Bạn có thể bỏ qua các giá trị null hoặc hiển thị chúng, nhưng tốt hơn hết là hiển thị chúng. Đôi khi chúng hữu ích vì chúng hiển thị trường nào xuất hiện
null
trong một số sự cố, ví dụ NullPointerException . -
Ví dụ: sử dụng định dạng khóa-giá trị,
member.name=member.value
hầu hết các IDE đều hỗ trợ điều này. -
Bao gồm các thành viên được kế thừa nếu bạn cho rằng họ nên cung cấp thông tin cần thiết cho lớp kế thừa.
-
Đôi khi một đối tượng chứa nhiều tham số tùy chọn và bắt buộc, như chúng tôi đã trình bày trong ví dụ về mẫu Builder , khi gần như không thể in tất cả các trường, trong trường hợp này, chúng tôi chỉ có thể in các trường bắt buộc, đặc biệt vì chúng tôi có các trường tùy chọn.
GO TO FULL VERSION