ใช้Objects.requireNonNull(Object)
สำหรับการที่
ตรวจสอบว่าการอ้างอิงวัตถุที่ระบุไม่ใช่โมฆะ วิธีนี้ถูกออกแบบมาเพื่อทำการตรวจสอบความถูกต้องของพารามิเตอร์ในวิธีการและตัวสร้าง [... ]
ในกรณีของคุณสิ่งนี้จะเป็น:
public void useObject(CustomObject customObject) {
object = customObject.getObject();
Objects.requireNonNull(object);
// Do stuff using object, which would throw a NPE if object is null.
}
ฟังก์ชั่นนี้ทำขึ้นเพื่อจุดประสงค์ที่คุณกล่าวถึงเช่นทำเครื่องหมายสิ่งที่ไม่ควรว่าง ยังอยู่ในการผลิต ประโยชน์ที่ยอดเยี่ยมคือคุณต้องแน่ใจว่าคุณพบค่าว่างตรงที่ไม่ควรเกิดขึ้นตั้งแต่แรก คุณจะมีปัญหาในการดีบักน้อยกว่าปัญหาที่เกิดจากค่า Null ที่ถูกส่งไปที่ไหนสักแห่งที่ไม่ควรเป็น
ประโยชน์ก็คือความยืดหยุ่นเพิ่มเติมเกี่ยวกับการตรวจสอบ null assert
ในทางตรงกันข้ามกับ ในขณะที่assert
เป็นคำหลักสำหรับการตรวจสอบค่าบูลีนObjects.requireNonNull(Object)
เป็นฟังก์ชั่นและทำให้สามารถฝังตัวในรหัสมีความยืดหยุ่นมากขึ้นและสามารถอ่านได้ เช่น:
Foo foo = Objects.requireNonNull(service.fetchFoo());
// You cannot write it in on line.
Bar bar = service.fetchBar();
assert bar != null;
service.foo(Objects.requireNonNull(service.getBar()));
// You cannot write it in on line.
Bar bar = service.getBar();
assert bar != null;
service.foo(bar);
โปรดทราบว่าObjects.requireNonNull(Object)
มีไว้สำหรับการตรวจสอบค่า Null โดยเฉพาะเมื่อassert
อยู่ในตำแหน่งทั่วไป assert
มีวัตถุประสงค์ที่แตกต่างกันเล็กน้อยในเรื่องนั้นคือการทดสอบขั้นต้น ต้องมีการเปิดใช้งานเพื่อให้คุณสามารถเปิดใช้งานได้สำหรับการทดสอบและปิดใช้งานเพื่อการผลิต อย่างไรก็ตามอย่าใช้เพื่อเป็นรหัสการผลิต มันอาจทำให้แอปพลิเคชันช้าลงด้วยการตรวจสอบที่ไม่จำเป็นและซับซ้อนซึ่งมีไว้สำหรับการทดสอบ ใช้เพื่อแยกการตรวจสอบการทดสอบเท่านั้นจากการตรวจสอบที่มีความหมายสำหรับการผลิตเช่นกัน
ตรวจสอบอย่างเป็นทางการเอกสารassert
รายละเอียดเกี่ยวกับ
-ea
หรือเทียบเท่า