เราได้เริ่มใช้ 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: เป็นข้อกำหนดของสัญญา ฉันได้ลบการตรวจสอบการป้องกันที่อยู่เบื้องหลังสัญญาและตอนนี้ก็ไม่มีปัญหา