Tôi đang cố xác thực tuần tự hóa và xóa tuần tự bằng cách so sánh đối tượng kết quả với đối tượng gốc. Các thói quen có thể tuần tự hóa các lớp tùy ý và sâu sắc và do đó tôi muốn một thói quen so sánh có thể được đưa ra trong trường hợp ban đầu và cuối cùng và đi qua từng loại giá trị và so sánh các giá trị và đi sâu vào các loại tham chiếu để so sánh các giá trị.So sánh phản xạ sâu tương đương với
Tôi đã thử Apache Commons Lang EqualsBuilder.reflectionEquals(inst1, inst2)
nhưng điều này không xuất hiện để làm một so sánh rất sâu, nó chỉ đơn giản là so sánh các loại tài liệu tham khảo cho bình đẳng chứ không phải lặn sâu hơn vào họ:
Các mã sau minh họa vấn đề của tôi. Cuộc gọi đầu tiên tới số reflectionEquals
trả về giá trị thực nhưng lệnh trả về thứ hai là false.
Có thói quen thư viện nào mà mọi người có thể giới thiệu không?
class dummy {
dummy2 nestedClass;
}
class dummy2 {
int intVal;
}
@Test
public void testRefEqu() {
dummy inst1 = new dummy();
inst1.nestedClass = new dummy2();
inst1.nestedClass.intVal = 2;
dummy inst2 = new dummy();
inst2.nestedClass = new dummy2();
inst2.nestedClass.intVal = 2;
boolean isEqual = EqualsBuilder.reflectionEquals(inst1.nestedClass, inst2.nestedClass);
isEqual = EqualsBuilder.reflectionEquals(inst1, inst2);
}
Nếu độ tương phản bằng chỉ so sánh các tham chiếu, thì nó có lỗi. Nó nên làm nhiều hơn thế. – DwB
@ DBB Tôi nghi ngờ ý định của mã là cho phép bạn thực hiện một cách tương đối equals() trong một lớp cụ thể. Điều này là khác với những gì tôi muốn mà là để phản ánh trên hai trường hợp đối tượng. Trong bối cảnh này nó không phải là một lỗi mà là một sự thất vọng! –
Tôi mất một nửa ngày, của hành vi không có giấy tờ yếu này của EqualsBuilder. Nếu trường của một đối tượng được truyền là một hàm nguyên thủy thì hàm gọi là object.equals(). Rất thất vọng và vô dụng. – AlexWien