Chúng tôi đã bắt đầu sử dụng FindBugs và chú thích các tham số của chúng tôi @Nonnull
một cách thích hợp và nó hoạt động rất tốt để chỉ ra các lỗi sớm trong chu kỳ. Cho đến nay chúng tôi vẫn tiếp tục kiểm tra các đối số này để null
sử dụng Guava checkNotNull
, nhưng tôi chỉ muốn kiểm tra null
các cạnh - những nơi mà giá trị có thể đến mà không cần phải kiểm tra null
, ví dụ: yêu cầu SOAP.
// service layer accessible from outside
public Person createPerson(@CheckForNull String name) {
return new Person(Preconditions.checkNotNull(name));
}
...
// internal constructor accessed only by the service layer
public Person(@Nonnull String name) {
this.name = Preconditions.checkNotNull(name); // remove this check?
}
Tôi hiểu rằng @Nonnull
không tự chặn null
giá trị.
Tuy nhiên, do FindBugs sẽ chỉ ra bất cứ nơi nào một giá trị được chuyển từ một trường không được đánh dấu sang một trường được đánh dấu @Nonnull
, chúng ta không thể phụ thuộc vào nó để bắt những trường hợp này (mà nó) mà không phải kiểm tra các giá trị này null
ở mọi nơi mà chúng đi qua hệ thống? Tôi có ngây thơ muốn tin tưởng công cụ và tránh những kiểm tra dài dòng này không?
Điểm mấu chốt: Mặc dù có vẻ an toàn để loại bỏ null
kiểm tra thứ hai bên dưới, nhưng nó có phải là thực tế xấu?
Câu hỏi này có lẽ quá giống với câu hỏi Người ta nên kiểm tra null nếu anh ta không mong đợi null , nhưng tôi đang hỏi cụ thể liên quan đến @Nonnull
chú thích.
@Nonnull
: như một đặc điểm kỹ thuật của hợp đồng. Tôi đã gỡ bỏ các kiểm tra phòng thủ đằng sau hợp đồng và cho đến nay không gặp khó khăn gì.