ฉันมีสายเหล่านี้หลายสาย:
(ListView) getView().findViewById(R.id.main_list_view);
(TextView) getView().findViewById(R.id.items_no);
....
และ AndroidStudio บอกฉันว่าพวกเขาอาจมี NullPointerException
:
การเรียกใช้เมธอด
getView().findViewById(R.id.main_list_view)
อาจทำให้java.lang.NullPointerException
น้อยลง... (Ctrl+F1)การตรวจสอบนี้จะวิเคราะห์การควบคุมวิธีการและการไหลของข้อมูลเพื่อรายงานเงื่อนไขที่เป็นไปได้ซึ่งเป็นจริงหรือเท็จเสมอ การแสดงออกซึ่งค่าที่ได้รับการพิสูจน์ทางสถิติว่าคงที่ และสถานการณ์ที่อาจนำไปสู่การละเมิดสัญญาที่เป็นโมฆะ
ตัวแปร พารามิเตอร์วิธีการ และค่าที่ส่งคืนที่ทำเครื่องหมายเป็น
@Nullable
หรือ@NotNull
จะถือเป็นโมฆะ (หรือไม่เป็นโมฆะ ตามลำดับ) และใช้ในระหว่างการวิเคราะห์เพื่อตรวจสอบสัญญาที่เป็นโมฆะ เช่น รายงานข้อผิดพลาดที่เป็นไปได้NullPointerException
สัญญาที่ซับซ้อนมากขึ้นสามารถกำหนดได้โดยใช้คำอธิบายประกอบ
@Contract
ตัวอย่างเช่น:
@Contract("_, null -> null")
— วิธีการคืนค่า null หากอาร์กิวเมนต์ที่สองเป็น null@Contract("_, null -> null; _, !null -> !null")
— วิธีการส่งคืน null หากอาร์กิวเมนต์ที่สองเป็น null และไม่เป็น null มิฉะนั้น
@Contract("true -> fail")
— วิธีการassertFalse
ทั่วไปซึ่งจะส่งข้อยกเว้นหากส่งผ่านเป็น trueการตรวจสอบสามารถกำหนดค่าให้ใช้คำอธิบายประกอบ
@Nullable
@NotNull
ที่กำหนดเองได้ (โดยค่าเริ่มต้นจะใช้คำอธิบายประกอบจาก annotations.jar)
โชคดีที่ทุกอย่างใช้งานได้ แต่มีการปรับปรุงโค้ดนี้ที่ฉันสามารถทำได้หรือไม่