Câu hỏi của bạn có một chút không rõ ràng. Trước tiên, bạn nói "hai trường hợp của cùng một lớp", sau đó bạn nói "các lớp học rất phức tạp". Đây có phải là một giải pháp chung để tìm sự khác biệt giữa các cá thể cho bất kỳ lớp học nào hay chỉ là một trường hợp cụ thể? Sự mơ hồ khác là điều bạn ngụ ý bằng cách "sao chép sự khác biệt". Ví dụ: nếu chuỗi của nó là Chuỗi thì sự khác biệt giữa hai chuỗi sẽ được sao chép vào cá thể mới là gì? Nếu bộ sưu tập của nó là sự khác biệt giữa các bộ sưu tập là gì? Điều gì nếu bạn có hai ArrayLists có cùng một thứ trong các đơn đặt hàng khác nhau.
Nếu trường hợp cụ thể của nó, thì bạn có thể chỉ cần tạo một phương thức trên lớp mà bạn vượt qua trong một thể hiện của cùng một lớp. Sau đó, bạn có thể lặp qua từng trường và so sánh sự khác biệt.
public TheClass difference(TheClass that) {
TheClass newClass = new TheClas()
if (this.getName().equals(that.getName()) == false) {
newClass.setName(that.getName());
}
...
}
Nhưng điều này có thể bị mất tùy thuộc vào độ sâu của biểu đồ đối tượng của bạn.
Có lẽ mô hình trình xây dựng có thể hữu ích ở đây nếu bạn đang cố gắng xây dựng một giải pháp chung/có thể sử dụng lại. Bạn có thể xem cơ sở mã Apache Commons và xem cách chúng triển khai HashCodeBuilder và ToStringBuilder như thế nào. Họ thậm chí có một phiên bản phản chiếu của các tiện ích. Xem cách họ xử lý bằng phẳng và nông.
Nguồn
2010-08-11 01:56:06
Hm ... không có hai hạt Java nào giống nhau ... http://www.coffeeobsessed.net/wp-content/uploads/2010/02/kawa-java-beans.jpg –