JavaRush /مدونة جافا /Random-AR /الحيل والنصائح. كيفية تجنب NullPointerException في تطبيقا...
DarthVictor
مستوى

الحيل والنصائح. كيفية تجنب NullPointerException في تطبيقات Java

نشرت في المجموعة
الحيل والنصائح.  كيفية تجنب NullPointerException في تطبيقات Java - 1سأعرض لك اليوم تقنيات بسيطة حول كيفية تجنب NullPointerException في تطبيقاتك. من السهل متابعتها، ولكنها تحسن بشكل كبير من موثوقية وجودة التعليمات البرمجية الخاصة بك. علاوة على ذلك، من خلال تجربتي، سيكون للنصيحة الأولى تأثير ملحوظ على جودة الكود الخاص بك. إذا كنت تعرف أي حيل أخرى لبرمجة Java، فلا تتردد في مشاركتها في التعليقات. الحيل والنصائح.  كيفية تجنب NullPointerException في تطبيقات Java - 2

استدعاء أساليب يساوي () و يساوي IgnoreCase () على سلسلة معروفة حرفيًا بدلاً من كائن غير معروف

قم دائمًا باستدعاء أسلوب equals()على سلسلة معروفة تعرف أنها ليست كذلك null. الطريقة equals()متماثلة، أي أنها تستدعي a.equals(b)وستعطي b.equals(a)نفس النتيجة (إذا aكان أو bلا null)، ولهذا السبب لا ينتبه العديد من المبرمجين إلى الكائنات التي يتم استدعاؤها equals()، y aأو y b. أحد الآثار الجانبية لهذا هو NullPointerException إذا تم استدعاء الطريقة null.
Object unknownObject = null;

//плохой способ - может вызвать NullPointerException
if(unknownObject.equals("knownObject")){
   System.err.println("This may result in NullPointerException if unknownObject is null");
}

//правильный способ - исключение NullPointerException не возникнет, даже если unknownObject null
if("knownObject".equals(unknownObject)){
    System.err.println("better coding avoided NullPointerException");
}
كانت هذه أبسط نصيحة لتجنب NullPointerException، لكنها وحدها تُحدث تحسنًا كبيرًا لأن الطريقة equals()منتشرة في كل مكان.

اختر valueOf() بدلاً من toString() في الحالات التي ينتج فيها كلاهما نفس النتيجة

نظرًا لأن استدعاء toString()مرجع ذي قيمة nullيؤدي إلى NullPointerException، فمن الأفضل استخدام الاتصال valueOf()عندما نتمكن من الحصول على نفس النتيجة، نظرًا لأن الاتصال valueOf()من nullreturn null. ينطبق هذا بشكل خاص على فئات المجمع مثل Integerأو Floatأو . DoubleBigDecimal
BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); //не выбрасывает NPE
System.out.println(bd.toString()); //выбрасывает "Exception in thread "main" java.lang.NullPointerException"
استخدم هذه النصائح عندما لا تكون متأكدًا من إمكانية وجود الكائن nullأم لا.

الاستخدام null- الأساليب والمكتبات الآمنة

هناك العديد من المكتبات مفتوحة المصدر التي تتحمل العبء الثقيل في اختبار null. أحد أكثرها شيوعًا هو StringUtilsمن Apache Commons. باستخدام أساليب مثل StringUtils.isBlank()، isNumeric()وما isWhiteSpace()إلى ذلك. لا داعي للقلق بشأن طرح NullPointerException.
//Методы StringUtils являются null-безопасными, они не вызовут NullPointerException
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));
الإخراج: true true false false ومع ذلك، قبل الاستخدام، لا تنس قراءة وثائق nullالطرق والفئات الآمنة. هذه واحدة أخرى من أفضل حيل Java التي تؤدي إلى تحسينات هائلة دون الحاجة إلى الكثير من الجهد.

حاول ألا تعود nullمن إحدى الطرق، فمن الأفضل أن ترجع مجموعة فارغة

هذه نصيحة جيدة أخرى لبرمجة Java يصفها جوشوا بلوخ في كتابه Java: البرمجة الفعالة. عند إرجاع مجموعات أو صفائف فارغة، تأكد من أن استدعاء الأساليب الأساسية مثل size()أو length()لا يؤدي إلى NullPointerException. يعلن الفصل Collectionsعلى وجه التحديد عن تطبيقات ملائمة للقوائم والمجموعات والقواميس الفارغة Collections.EMPTY_LIST: Collections.EMPTY_SETو Collections.EMPTY_MAP. على سبيل المثال:
public List getOrders(Customer customer){
   List result = Collections.EMPTY_LIST;
   return result;
}
وبالمثل، يمكنك استخدامه Collections.EMPTY_SETبدلاً Collections.EMPTY_MAPمن العودة null.

استخدم التعليقات التوضيحية @NotNull و@Nullable

في وصف الطرق الخاصة بك، يمكنك تحديد nullاصطلاحات سلامة الطريقة باستخدام التعليقات التوضيحية @NotNullو@Nullable للإشارة إلى ما إذا كان يمكن للطريقة العودة nullأم لا. يمكن للمترجمين وبيئات التطوير المتكاملة (IDEs) الحديثة استخدام هذه التعليقات التوضيحية لتحليل التعليمات البرمجية الخاصة بك وتقديم النصائح المناسبة، على سبيل المثال، حول فقدان فحص لـ null، أو العكس، حول إمكانية إزالة فحص غير ضروري يؤدي إلى انسداد التعليمات البرمجية. مثل هذه التعليقات التوضيحية، على سبيل المثال، مدعومة بواسطة IntelliJ IDE وFindBugs، وهي مدرجة أيضًا في JSR 305. ولكن حتى لو كان IDE الخاص بك لا يدعم مثل هذه التعليقات التوضيحية، فستكون توثيقًا جيدًا في حد ذاتها. بالنظر إلى @NotNullذلك، @Nullableسيكون من الأسهل على المبرمج أن يفهم مكان إضافة الشيك nullوأين لا. هذه، بالمناسبة، ممارسة جديدة إلى حد ما بين مبرمجي جافا، وسوف يستغرق الأمر بعض الوقت حتى تنتشر.

تجنب التشغيل التلقائي والإلغاء التلقائي غير الضروريين في التعليمات البرمجية الخاصة بك

لا يؤدي هذا إلى إنشاء كائنات مؤقتة غير ضرورية فحسب، بل يمكن للعلبة التلقائية أيضًا طرح NullPointerException إذا كانت فئة الغلاف هي null. على سبيل المثال، ستطرح التعليمة البرمجية التالية NullPointerException إذا كان إدخال الشخص لا يحتوي على رقم هاتف ويقوم بإرجاع null.
Person ram = new Person("ram");
int phone = ram.getPhone();
عند استخدام autoboxing أو autounboxing، ليس فقط المساواة، ولكن أيضًا عدم المساواة <> >يمكن أن يؤدي إلى NullPointerException.

اتبع الاتفاقيات وحدد الافتراضات المعقولة.

إحدى أفضل الطرق لتجنب NullPointerException في Java هي الإعلان عن اصطلاحات البرمجة ومتابعتها بشكل صحيح. تحدث معظم استثناءات NullPointerExceptions عند محاولة إنشاء كائن دون الحصول على كافة البيانات والتبعيات التي يتطلبها. من خلال منع إنشاء كائنات غير مكتملة عن طريق رفض مثل هذه الطلبات بأمان، ستنقذ نفسك من عدد كبير من NullPointerExceptions في المستقبل. وبالمثل، إذا سمحت بإنشاء الكائن، فيجب عليك اختيار قيمة افتراضية معقولة. على سبيل المثال، لا يمكن إنشاء كائن فئة Employeeبدون اسم و id، ولكن لا يجوز أن يحتوي على رقم هاتف. في هذه الحالة، Employeeقد تُرجع الكائنات التي لا تحتوي على أرقام صفرًا بدلاً من ذلك null. على الرغم من أنه يجب التفكير مسبقًا في مثل هذا السلوك للكائن - فقد يكون التحقق منه أسهل nullمن الاتصال برقم غير موجود. في هذه الحالة، فإن وجود شروط إضافية بشأن الحقول الموجودة nullوأيها غير موجودة سيساعد في اتخاذ القرار الصحيح. بشكل عام، يعد الاختيار بين إيقاف البرنامج فورًا أو تعيينه nullقرارًا تصميميًا مهمًا، وبمجرد قيامك بالاختيار، يجب عليك اتباعه باستمرار.

قم بتعيين القيود على مستوى نظام إدارة قواعد البيانات (DBMS).

عند استخدام قاعدة بيانات لتخزين كائنات برنامجك، مثل العملاء أو الطلبات، فمن الحكمة تحديد " nullطبيعة" كائناتك على مستوى نظام إدارة قواعد البيانات (DBMS)، باستخدام قيود الجدول المناسبة. غالبًا ما تحتوي قواعد البيانات على معلومات من مصادر متعددة، وسيعمل إجراء عمليات التحقق من القيم المفقودة على تحسين سلامة بياناتك. بالإضافة إلى ذلك، فإن وجود عمليات التحقق من القيمة الخالية على مستوى نظام إدارة قواعد البيانات (DBMS) سيؤدي إلى تقليلها في كود Java الخاص بك: عن طريق تحميل البيانات من قاعدة البيانات إلى كائنات Java، يمكنك التأكد من وجودها وإزالة " " غير الضرورية != nullمن كود البرنامج.

استخدم نمط الكائن الفارغ

يعد إنشاء Nullكائنات خاصة طريقة أخرى لتجنب NullPointerExcpetion في Java. لنفترض أن بعض الطرق في تطبيقنا تُرجع كائنًا يعمل البرنامج معه لاحقًا عن طريق استدعاء أساليبه. على سبيل المثال، تقوم الطريقة Collection.iterator()بإرجاع كائن من الفئة Iteratorالمستخدمة للتكرار عبر المجموعة. ثم إذا لم يكن الكائن الأصلي يحتوي على أي مكرر، nullفيمكنك بدلاً من ذلك إرجاع Nullكائن - خاص له طريقة hasNext()تُرجع دائمًا false. هذا كل شيء عزيزي القارئ، وهنا أنهي نصائحي لتخليص برامج Java من أخطاء NullPointerException. سوف تقدر مدى فائدة هذه القواعد البسيطة وغير المرهقة. للتذكير، إذا كنت تريد مشاركة أي حيل أخرى لـ NullPointerException في برامج Java، فلا تتردد في القيام بذلك في التعليقات. تمت ترجمته خصيصًا لطلاب JavaRush. إبداعي
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION