JavaRush /Blog Java /Random-VI /Getters và đóng gói bị hỏng
Vadelic
Mức độ
Пасадена

Getters và đóng gói bị hỏng

Xuất bản trong nhóm
Trong khi giải quyết vấn đề, tôi gặp phải hành vi không mong muốn của getters. Trong các bài giảng ở đây và thậm chí trong các getters do IntelliJ IDEA tạo ra, sơ đồ đơn giản nhất được sử dụng: public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } Nếu trường là kiểu nguyên thủy hoặc Chuỗi, được truyền theo giá trị thì mọi thứ đều ổn, nhưng nếu đối tượng được truyền bằng tham chiếu, sau đó hóa ra là thông qua getter, bạn có thể có toàn quyền truy cập vào trường, điều này sẽ vô hiệu hóa mức truy cập được bảo vệ đã đặt. Nếu setter chứa bất kỳ điều kiện hợp lệ nào thì nó có thể được bỏ qua thông qua một getter như vậy, điều này vi phạm tính đóng gói và sẽ đúng nếu tạo một bản sao của đối tượng để tránh rắc rối này. Tôi hiểu rằng không phải tất cả các đối tượng đều có thể được sao chép dễ dàng và nếu việc này được giao cho người lập trình viên chịu trách nhiệm thì thật kỳ lạ tại sao không có đề cập đến điều này ở bất cứ đâu trong các bài giảng. CẬP NHẬT: Tất nhiên, một getter, như một ý tưởng, không vi phạm tính đóng gói, nhưng nó phải được viết theo cách không phản bội các nguyên tắc của OOP. Điều này có nghĩa là nếu một getter tạo ra một đối tượng thì nó sẽ làm như vậy theo cách mà người dùng không thể thay đổi nó theo bất kỳ cách nào khác được chỉ định trong lớp. Có một phương thức tuyệt vời trong lớp Bộ sưu tập tạo ra bộ sưu tập chỉ đọc. Điều này áp đặt một số hạn chế khác, ví dụ, không thể sắp xếp, nhưng trong trường hợp này, lớp này có: unmodibilitySortedSet unmodibilitySortedMap và một số hạn chế khác, để thuận tiện hơn. public static Collection unmodifiableCollection(Collection c)
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION