Nhìn qua Khung công tác bộ sưu tập Java, tôi nhận thấy khá nhiều giao diện có nhận xét (optional operation)
. Các phương thức này cho phép thực hiện các lớp thông qua UnsupportedOperationException
nếu chúng không muốn thực hiện phương thức đó.
Một ví dụ về điều này là addAll
phương thức trong Set Interface
.
Bây giờ, như đã nêu trong loạt câu hỏi này, các giao diện là một hợp đồng xác định cho những gì sử dụng có thể mong đợi.
Các giao diện rất quan trọng vì chúng tách biệt những gì một lớp làm với cách nó thực hiện. Hợp đồng xác định những gì khách hàng có thể mong đợi để nhà phát triển tự do thực hiện nó theo bất kỳ cách nào họ chọn, miễn là họ duy trì hợp đồng.
và
Giao diện là một mô tả về các hành động mà một đối tượng có thể làm ... ví dụ: khi bạn bật công tắc đèn, đèn sẽ sáng, bạn không quan tâm làm thế nào, chỉ là nó làm như vậy. Trong Lập trình hướng đối tượng, Giao diện là một mô tả về tất cả các chức năng mà một đối tượng phải có để là "X".
và
Tôi nghĩ rằng cách tiếp cận dựa trên giao diện là đẹp hơn đáng kể. Sau đó, bạn có thể chế giễu sự phụ thuộc của mình một cách độc đáo, và mọi thứ về cơ bản được kết hợp chặt chẽ hơn.
Giao diện + Tiện ích mở rộng (mixin) so với Lớp cơ sở
Cho rằng mục đích của các giao diện là xác định hợp đồng và làm cho các phụ thuộc của bạn được ghép lỏng lẻo, không có một số phương pháp đưa ra một UnsupportedOperationException
mục đích đánh bại mục đích? Nó có nghĩa là tôi không còn có thể được thông qua Set
và chỉ sử dụng addAll
. Thay vào đó, tôi phải biết việc triển khai Set
tôi đã được thông qua, vì vậy tôi có thể biết liệu tôi có thể sử dụng addAll
hay không. Điều đó dường như khá vô giá trị với tôi.
Vậy quan điểm của nó là UnsupportedOperationException
gì? Có phải nó chỉ bù cho mã kế thừa, và họ cần dọn sạch giao diện của họ? Hay nó có một mục đích hợp lý hơn mà tôi đang thiếu?
addAll
trongHashSet
. Nó trì hoãn việc thực hiện mặc định trongAbstractCollection
đó chắc chắn không némUnsupportedOperationException
.