เราได้เริ่มใช้ FindBugs และใส่คำอธิบายประกอบพารามิเตอร์ของเรา@Nonnull
อย่างเหมาะสมและใช้งานได้ดีในการชี้จุดบกพร่องในช่วงต้นรอบ จนถึงตอนนี้เราได้ตรวจสอบข้อโต้แย้งเหล่านี้อย่างต่อเนื่องเพื่อnull
ใช้ของ Guava checkNotNull
แต่ฉันต้องการตรวจสอบnull
เฉพาะที่ขอบ - สถานที่ที่ค่าสามารถเข้ามาโดยไม่ได้รับการตรวจสอบnull
เช่นคำขอ 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?
}
ฉันเข้าใจ@Nonnull
ว่าไม่ได้บล็อกnull
ค่าตัวเอง
แต่ให้ที่ FindBugs จะชี้ให้เห็นได้ทุกค่าจะถูกโอนจากสนามป้ายให้เป็นหนึ่งในการทำเครื่องหมาย@Nonnull
ไม่สามารถเราขึ้นอยู่กับมันจะจับกรณีเหล่านี้ (ซึ่งมันไม่) โดยไม่ต้องตรวจสอบค่าเหล่านี้สำหรับnull
ทุกที่ที่พวกเขาได้รับการผ่านรอบใน ระบบ? ฉันไร้เดียงสาที่ต้องการเชื่อถือเครื่องมือและหลีกเลี่ยงการตรวจสอบ verbose เหล่านี้หรือไม่
Bottom line:แม้ว่าจะปลอดภัยที่จะลบการnull
ตรวจสอบครั้งที่สองด้านล่าง แต่เป็นการปฏิบัติที่ไม่ดีหรือไม่?
คำถามนี้อาจคล้ายกันเกินไปหากหนึ่งควรตรวจสอบเป็นโมฆะถ้าเขาไม่ได้คาดหวังเป็นโมฆะแต่ฉันถามเฉพาะที่เกี่ยวข้องกับ@Nonnull
บันทึกย่อ
@Nonnull
: เป็นข้อกำหนดของสัญญา ฉันได้ลบการตรวจสอบการป้องกันที่อยู่เบื้องหลังสัญญาและตอนนี้ก็ไม่มีปัญหา