HÃY THỬ!
Các xác nhận được loại bỏ trong thời gian chạy trừ khi bạn xác định rõ ràng là "bật các xác nhận" khi biên dịch mã của bạn. Các xác nhận Java không được sử dụng trên mã sản xuất và nên được giới hạn ở các phương thức riêng tư (xem Ngoại lệ so với Xác nhận ), vì các phương thức riêng tư dự kiến chỉ được các nhà phát triển biết và sử dụng. Cũng assert
sẽ ném AssertsError kéo dài Error
không Exception
, và thông thường cho thấy bạn có một lỗi rất bất thường (như "OutOfMemoryError" rất khó để phục hồi, phải không?) Bạn không thể điều trị được.
Xóa cờ "bật xác nhận" và kiểm tra với trình gỡ lỗi và bạn sẽ thấy rằng bạn sẽ không thực hiện cuộc gọi ném IllegalArgumentException ... vì mã này chưa được biên dịch (một lần nữa, khi "e" bị xóa)
Tốt hơn là sử dụng cấu trúc thứ hai cho các phương thức công khai / được bảo vệ và nếu bạn muốn một cái gì đó được thực hiện trong một dòng mã, có ít nhất một cách mà tôi biết. Cá nhân tôi sử dụng Spring Framework 's Assert
lớp mà có một vài phương pháp để kiểm tra đối số và ném 'IllegalArgumentException' trên thất bại. Về cơ bản, những gì bạn làm là:
Assert.notNull(obj, "object was null");
... Thực tế sẽ thực thi chính xác cùng mã mà bạn đã viết trong ví dụ thứ hai. Có một vài phương pháp hữu ích khác như hasText
, hasLength
trong đó.
Tôi không thích viết nhiều mã hơn mức cần thiết, vì vậy tôi rất vui khi giảm số dòng viết xuống 2 (2 dòng> 1 dòng) :-)
obj.hashCode()
thay vào đó ;-)