เคล็ดลับ Java และวิธีที่ดีที่สุดในการหลีกเลี่ยง nullponintexception ในแอปพลิเคชัน Java
ในแอปพลิเคชัน Java, nullponintexception (ข้อยกเว้นตัวชี้ NULL) เป็นทางออกที่ดีที่สุด (ปัญหา) ในเวลาเดียวกันตัวชี้โมฆะก็เป็นกุญแจสำคัญในการเขียนรหัสการรันที่แข็งแกร่งและราบรื่น วลี“ การป้องกันดีกว่าการรักษา” ยังใช้กับ nullponintexception ที่ไม่พึงประสงค์ ด้วยการใช้เทคนิคการเข้ารหัสการป้องกันและการประชุมตามหลายส่วนคุณสามารถหลีกเลี่ยง nullpointexception ในระดับใหญ่ เคล็ดลับ Java ต่อไปนี้สามารถลดภาพได้! = รหัสว่างสำหรับการตรวจสอบประเภทนี้ ในฐานะโปรแกรมเมอร์ Java ที่มีประสบการณ์คุณอาจตระหนักว่ามีการใช้เทคโนโลยีเหล่านี้ในบางโครงการ แต่สำหรับนักศึกษาวิทยาลัยปีแรกและนักพัฒนาระดับกลางนี่เป็นโอกาสการเรียนรู้ที่ยอดเยี่ยม
นี่เป็นเทคนิคง่ายๆที่ง่ายต่อการเรียนรู้ แต่มันสำคัญมากสำหรับคุณภาพของรหัสและความทนทาน จากประสบการณ์ของฉันเพียงแค่เคล็ดลับแรกมีบทบาทสำคัญในการปรับปรุงคุณภาพรหัส
1) โทรหาค่าเท่ากับ () และเท่ากับเท่ากับ () บนสตริงที่มีอยู่ (สตริง) แทนวัตถุที่ไม่รู้จัก
โดยปกติแล้ว Equals () จะถูกเรียกในสตริงที่ไม่ว่างเปล่าแล้ว เนื่องจากวิธีการที่เท่าเทียมกัน () มีความสมมาตรการโทร A.equal () เท่ากับการโทร b.equal () และนี่คือเหตุผลที่หลายคนให้ความสนใจกับวัตถุ A และ B หากด้านใดด้านหนึ่งของว่างจะทำให้ตัวชี้โมฆะ
Object unknownObject = null; // วิธีที่ผิด - อาจทำให้ nullpointerexceptionif (unknownobject.equals ("รู้จัก")) {system.err.println ("สิ่งนี้อาจส่งผลให้ nullpointerexception ถ้า unknownobject เป็น null") System.err.println ("ดีกว่าการเข้ารหัสหลีกเลี่ยง nullpointerexception");}นี่เป็นเคล็ดลับ Java ที่สำคัญที่สุดในการหลีกเลี่ยง NullPointException แต่ผลลัพธ์จะเป็นการปรับปรุงอย่างมากเนื่องจาก Equal () เป็นวิธีที่พบบ่อยมาก
2) เมื่อทั้งสองส่งคืนผลลัพธ์เดียวกัน Valueof () เป็นที่ต้องการแทนที่จะเป็น toString ()
เพราะวัตถุเปล่าจะโยน nullpointexception เมื่อเรียก toString () หากเราได้รับค่าเดียวกันโดยการโทร () เราควรใช้ค่าของ () สิ่งนี้จะผ่านค่าโมฆะ โดยเฉพาะอย่างยิ่งในกรณีของคลาสบรรจุภัณฑ์เช่นจำนวนเต็มลอยสองหรือ bigdecimla
bigdecimal bd = getPrice (); system.out.println (string.valueof (bd)); // ไม่โยน npesystem.out.println (bd.toString ()); // พ่น "ข้อยกเว้นในเธรด" หลัก "java.lang.nullpointerexception"
หากคุณไม่แน่ใจว่าวัตถุที่คุณใช้ว่างเปล่าโปรดใช้เคล็ดลับ Java นี้
3) ใช้วิธี Safe Null หรือไลบรารีคลาส
ตอนนี้มีส่วนประกอบโอเพ่นซอร์สมากมายที่มีการตรวจสอบ Null ให้คุณแล้ว หนึ่งในสิ่งที่พบบ่อยที่สุดคือ stringutils ของ Apache คุณสามารถใช้ stringutils.isblank (), isnumberic (), iswhitespace () และเครื่องมืออื่น ๆ โดยไม่ต้องกังวลเกี่ยวกับวิธีการ nullpointexception
System.out.println (stringutils.isempty (null)); system.out.println (stringutils.isblank (null)); system.out.println (stringutils.isnumeric (null)); system.out.println
แต่อย่าลืมอ่านเอกสารเกี่ยวกับวิธีการรักษาความปลอดภัยและชั้นเรียนว่างก่อนที่จะทำข้อสรุปใด ๆ นี่เป็นอีกหนึ่งการฝึกซ้อม Java ที่ดีที่สุดซึ่งไม่ต้องการให้คุณใช้ความพยายามอย่างมาก แต่จะทำให้คุณมีความคืบหน้ามาก
4) หลีกเลี่ยงการคืนค่าการรวบรวมที่ว่างเปล่าหรืออาร์เรย์ที่ว่างเปล่าแทนที่จะส่งคืนค่า null จากวิธีการ
เทคนิค Java นี้ยังกล่าวถึงใน "Java ที่มีประสิทธิภาพ" ของ Joshua Bloch หนังสือเล่มนี้ยังเป็นแหล่งสำหรับการปรับปรุงความสามารถในการเข้ารหัส Java ด้วยการส่งคืนคอลเลกชันที่ว่างเปล่าหรืออาร์เรย์ที่ว่างเปล่าสามารถกำหนดได้ว่าการโทรพื้นฐานเช่นขนาด () และความยาว () จะไม่โยน nullpointexception คลาสคอลเลกชันสามารถให้รายการว่างเปล่าที่สะดวกสบายตั้งค่าและแผนที่ (เหล่านี้) มีคอลเลกชัน sempty_list, collections.empty_set และ collections.empty_map และสิ่งเหล่านี้สามารถใช้ (ตัวแปรคงที่)
รหัสมีดังนี้
รายชื่อสาธารณะ getOrders (ลูกค้าลูกค้า) {รายการผลลัพธ์ = collections.empty_list; ผลการกลับมา; -ในทำนองเดียวกันคุณสามารถใช้ collections.empty_list, collections.empty_set และ collections.empty_map แทนการคืนค่า null
5) แสดงความคิดเห็นกับ @NotNull และ @Nullable
เมื่อเขียนคุณสามารถกำหนดความเป็นโมฆะการประชุมได้คุณควรแจ้งให้ทราบว่าวิธีนี้เป็นโมฆะปลอดภัยโดยใช้ความคิดเห็นเช่น @NotNull และ @Nullable คอมไพเลอร์ที่ทันสมัย ides และเครื่องมืออื่น ๆ สามารถอ่านความคิดเห็นนี้เพื่อช่วยให้คุณตรวจสอบว่างเปล่าหรือบอกคุณว่าคุณต้องการการตรวจสอบที่ว่างเปล่า Intellijide และ FindBugs สนับสนุนคำอธิบายประกอบนี้แล้ว ความคิดเห็นเหล่านี้ยังเป็นส่วนหนึ่งของ JSR 305 (หมายเหตุของนักแปล: สามารถเข้าใจได้ว่าเป็นมาตรฐานของ Java) เมื่อเห็น @NotNull และ @Nullable โปรแกรมเมอร์สามารถตัดสินใจได้ว่าจะทำการตรวจสอบที่ว่างเปล่าหรือไม่ โดยวิธีการนี่เป็นแนวปฏิบัติที่ดีที่สุดใหม่สำหรับโปรแกรมเมอร์ Java แม้ว่ามันจะใช้เวลาเล็กน้อยในการปรับตัว
6) ติดตามการประชุมและกำหนดค่าเริ่มต้นที่สมเหตุสมผล
ในสนามชวาวิธีที่ดีที่สุดอย่างหนึ่งในการหลีกเลี่ยงพอยน์เตอร์ที่ว่างเปล่าคือการทำข้อตกลงและปฏิบัติตามพวกเขา NullPointExceptions ส่วนใหญ่เกิดขึ้นเนื่องจากพวกเขาใช้ข้อมูลที่ไม่สมบูรณ์หรือไม่ได้รับการอ้างอิงทั้งหมดเพื่อสร้างวัตถุ หากคุณไม่อนุญาตให้สร้างวัตถุที่ไม่สมบูรณ์และลบล้างข้อกำหนดดังกล่าวคุณสามารถป้องกันไม่ให้ NullPointExceptions จำนวนมากที่เกิดขึ้นหลังจากนั้นไม่นาน หากวัตถุได้รับอนุญาตให้สร้างคุณควรตั้งค่าเริ่มต้นที่สมเหตุสมผล ตัวอย่างเช่นวัตถุพนักงานไม่สามารถสร้างได้หากไม่มีแอตทริบิวต์ ID และชื่อ แต่สามารถมีหมายเลข pghone เสริมได้ หากพนักงานไม่มีหมายเลขโทรศัพท์ให้ส่งคืน 0 แทนที่จะส่งคืนค่า NULL แต่การประมวลผลประเภทนี้จะต้องจัดการการตรวจสอบค่า NULL อย่างระมัดระวังมากกว่าตรวจสอบอินพุตที่ผิดกฎหมาย โปรดทราบว่าเมื่อกำหนดค่า NULL หรือไม่ให้เตือนผู้โทรให้ตัดสินใจอย่างมีข้อมูล การเลือกหรือยอมรับค่าว่างหลังจากความล้มเหลวก็เป็นการออกแบบที่สำคัญที่คุณต้องใส่ใจ
7) หากคุณใช้ฐานข้อมูลเพื่อจัดเก็บวัตถุโดเมนของคุณ (วัตถุ Demain)
ตัวอย่างเช่น: ลูกค้าคำสั่งซื้อ ฯลฯ จากนั้นคุณควรกำหนดข้อ จำกัด บางอย่างเกี่ยวกับค่า NULL ในฐานข้อมูล เนื่องจากฐานข้อมูลสามารถต้องการข้อมูลจากหลายแหล่งการตรวจสอบค่า NULL ในฐานข้อมูลจะช่วยให้มั่นใจถึงความสมบูรณ์ของข้อมูล การรักษาข้อ จำกัด เกี่ยวกับค่า NULL ในฐานข้อมูลจะช่วยให้คุณลดการตรวจสอบ null ใน Java เมื่อคุณนำวัตถุจากฐานข้อมูลคุณสามารถตรวจสอบให้แน่ใจว่าคุณสมบัติเหล่านั้นอาจว่างเปล่าและคุณสมบัติเหล่านั้นไม่สามารถว่างเปล่าซึ่งจะลดรหัสสำหรับการตรวจสอบที่ว่างเปล่าเหล่านั้น
8) ใช้โหมดวัตถุเปล่า
นี่เป็นอีกวิธีหนึ่งในการหลีกเลี่ยง NullPointException ใน Java หากวิธีการส่งคืนวัตถุซึ่งผู้โทรที่ต้องการทำซ้ำผ่านวัตถุซึ่งผู้โทรต้องใช้วิธีการบางอย่างที่คล้ายกับ collection.iterator () เพื่อส่งคืนตัววนซ้ำ หากผู้โทรไม่มีวิธีใด ๆ ข้างต้นอาจเป็นไปได้ว่าวัตถุที่ว่างเปล่าจะถูกส่งคืนแทน NULL วัตถุที่ว่างเปล่าเป็นวัตถุพิเศษที่มีความหมายแตกต่างกันในบริบทที่แตกต่างกัน ในกรณีที่วิธีการเช่นการเรียกร้องการส่งคืนหรือประเภทการเชื่อมต่อเหล่านี้ควรใช้วัตถุเปล่า (วัตถุว่าง) ภายในแทนการส่งคืนที่ว่างเปล่า