Điều cần thiết đặc biệt trong mô hình khung đậu java, nhưng nó không bắt buộc nói chung.
Bạn có thể có setter mà không có đối số khi chúng có nghĩa là "swith" một giá trị. Ví dụ:
void setCheck()
có thể có nghĩa là đặt thuộc tính boolean "kiểm tra" thành true.
Vì vậy, ngay cả khi nó không phải là "setter" trong nghĩa java bean của thuật ngữ, bạn có thể tưởng tượng setter được sử dụng cho các mục đích khác.
Thêm vào đó, theo điều 7 của thông số kỹ thuật JavaBean, một setter thể có hơn một đối số, ví dụ đối với tài sản Indexed (Một tài sản được lập chỉ mục hỗ trợ một loạt các giá trị. Bất cứ khi nào tài sản được đọc hoặc viết cho bạn chỉ cần chỉ định một chỉ số để xác định giá trị mà bạn muốn.)
void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter
trong trường hợp của bạn, một cách tiếp cận hợp lệ sẽ được thêm một runtime exception để có chữ ký của chức năng của chúng tôi.
Bằng cách đó bạn không đặt bất kỳ trường hợp ngoại lệ biên dịch không cần thiết nào cho tất cả các lớp khác đang gọi setter của bạn.
Hoặc bạn có thể xem tài sản của mình là Thuộc tính bị ràng buộc và thêm ngoại lệ không phải là thời gian chạy.
Phương thức thiết lập thuộc tính bị ràng buộc được yêu cầu để hỗ trợ PropertyVetoException. Tài liệu này cho người dùng thuộc tính bị hạn chế cố gắng cập nhật có thể bị phủ quyết. Vì vậy, một tài sản bị hạn chế đơn giản có thể trông giống như:
PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;
mà cho phép VetoableChangeListener được bổ sung nếu cần thiết.
Về đoạn mã của bạn, nó là "hợp lệ" nhưng có thể không tối ưu vì (như đã nói ở this question):
- Validation nên được chụp riêng rẽ với getters hoặc setters trong một phương pháp xác nhận . Bằng cách đó, nếu xác thực cần được sử dụng lại trên nhiều thành phần, nó có sẵn.
- Tốt hơn là không nhanh chóng (do đó đề xuất của tôi là thêm ngoại lệ cho trình thiết lập).
Xem thêm http://stackoverflow.com/questions/2750/data-verifications-in-gettersetter-or-elsewhere – VonC
Cảm ơn bạn rất, rất nhiều. – DragonBorn
Chỉ cần thêm câu trả lời vào đoạn mã – VonC