JavaRush /جاوا بلاگ /Random-SD /ترڪيبون ۽ صلاحون. جاوا ايپليڪيشنن ۾ NullPointerException ...
DarthVictor
سطح

ترڪيبون ۽ صلاحون. جاوا ايپليڪيشنن ۾ NullPointerException کان ڪيئن بچجي

گروپ ۾ شايع ٿيل
ترڪيبون ۽ صلاحون.  جاوا ايپليڪيشنن ۾ NullPointerException کان ڪيئن بچجي - 1اڄ آئون توهان کي سادي ٽيڪنڪ ڏيکاريندس ته ڪيئن توهان جي ايپليڪيشنن ۾ NullPointerException کان بچڻ لاء. اهي پيروي ڪرڻ آسان آهن، پر خاص طور تي توهان جي ڪوڊ جي اعتبار ۽ معيار کي بهتر بڻائي ٿو. ان کان علاوه، منهنجي تجربي ۾، پهرين ٽپ توهان جي ڪوڊ جي معيار تي قابل ذڪر اثر هوندي. جيڪڏهن توهان ڪنهن ٻئي جاوا پروگرامنگ چالن کي ڄاڻو ٿا، انهن کي تبصرن ۾ حصيداري ڪرڻ لاء آزاد محسوس ڪريو. ترڪيبون ۽ صلاحون.  جاوا ايپليڪيشنن ۾ NullPointerException کان ڪيئن بچجي - 2

Call equals() and equalsIgnoreCase() طريقن کي اڻ ڄاتل اسٽرنگ لٽريريل تي اڻڄاتل اعتراض جي بجاءِ

ھميشه ھڪڙي طريقي کي equals()ھڪڙي سڃاتل اسٽرنگ تي سڏين ٿا جيڪو توھان ڄاڻو ٿا ته نه آھي null. طريقو equals()symmetric آهي، يعني ڪال ڪندي a.equals(b)۽ b.equals(a)ساڳيو ئي نتيجو ڏيندو ( if aand bnot 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()کان ڪال ڪرڻ کان وٺي . اهو خاص طور تي لفافي طبقن جهڙوڪ , , يا . nullnullIntegerFloatDoubleBigDecimal
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. سڀ کان وڌيڪ عام مان هڪ آهي StringUtilsApache 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));
ٻاھر نڪتو: سچو سچو ڪوڙوnull ۽ اڃا تائين، استعمال ڪرڻ کان اڳ، محفوظ طريقن ۽ طبقن جي دستاويز کي پڙھڻ نه وساريو . هي هڪ ٻيو بهترين جاوا چالن مان آهي جيڪو وڏي ڪوشش جي ضرورت کان سواءِ وڏي سڌاري جي طرف وٺي وڃي ٿو.

nullڪوشش ڪريو ھڪڙي طريقي سان واپس نه وڃو ، اھو بھتر آھي ته ھڪڙو خالي مجموعو واپس ڏيو

هي هڪ ٻيو سٺو جاوا پروگرامنگ ٽپ آهي جيڪو جوشوا بلوچ پنهنجي ڪتاب جاوا ۾ بيان ڪيو آهي: مؤثر پروگرامنگ. جڏهن خالي مجموعا يا صفون واپس ڪري رهيا آهيو، پڪ ڪريو ته ڪالنگ بنيادي طريقن جهڙوڪ NullPointerException اڇلائي size()يا نه اڇلائي. length()ڪلاس Collectionsخاص طور تي خالي لسٽن، سيٽن ۽ لغتن جي آسان عملن جو اعلان ڪري ٿو: Collections.EMPTY_LIST, Collections.EMPTY_SETand 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();
جڏهن آٽو باڪسنگ يا آٽو ان باڪسنگ استعمال ڪندي، نه رڳو برابري، پر غير برابري پڻ <> >نتيجي ۾ ٿي سگھي ٿي NullPointerException.

ڪنوينشن جي پيروي ڪريو ۽ معقول ڊفالٽس جي وضاحت ڪريو.

جاوا ۾ NullPointerException کان بچڻ جو ھڪڙو بھترين طريقو آھي صحيح طريقي سان اعلان ڪرڻ ۽ ڪوڊنگ ڪنوينشن جي پيروي ڪرڻ. گهڻيون NullPointerExceptions تڏهن ٿينديون آهن جڏهن توهان ڪنهن شئي کي ٺاهڻ جي ڪوشش ڪندا آهيو بغير سڀني ڊيٽا ۽ انحصار جي ان کي گهربل هجي. اهڙين درخواستن کي خوشيءَ سان رد ڪندي نامڪمل شين جي تخليق کي روڪڻ سان، توهان مستقبل ۾ وڏي تعداد ۾ NullPointerExceptions کان پاڻ کي بچائيندا. ساڳئي طرح، جيڪڏهن توهان اعتراض ٺاهڻ جي اجازت ڏيو ٿا، توهان کي هڪ مناسب ڊفالٽ قيمت چونڊڻ گهرجي. مثال طور، هڪ ڪلاس شئي Employeeبنا ڪنهن نالي جي پيدا نه ٿي ڪري سگھجي ۽ id، پر شايد فون نمبر نه هجي. انهي حالت ۾، شيون Employeeبغير نمبر جي بدران صفر واپس ڪري سگھن ٿيون null. جيتوڻيڪ اعتراض جي اهڙي رويي کي اڳ ۾ ئي سوچڻ گهرجي - اهو nullغير موجود نمبر کي ڪال ڪرڻ جي ڀيٽ ۾ چيڪ ڪرڻ آسان ٿي سگهي ٿو. انهي حالت ۾، اضافي شرطن تي ڪهڙا فيلڊ آهن null۽ ڪهڙا نه آهن صحيح فيصلو ڪرڻ ۾ مدد ڪندي. عام طور تي، پروگرام کي فوري طور تي تباهه ڪرڻ يا ان کي تفويض ڪرڻ جي وچ ۾ چونڊ nullهڪ اهم ڊيزائن جو فيصلو آهي، ۽ هڪ دفعو توهان چونڊيو آهي، توهان کي لازمي طور تي ان جي پيروي ڪرڻ گهرجي.

DBMS سطح تي پابنديون مقرر ڪريو

جڏهن توهان جي پروگرام جي شين کي ذخيرو ڪرڻ لاء ڊيٽابيس استعمال ڪندي، جهڙوڪ ڪسٽمر يا آرڊر، اهو مناسب آهي ته nullتوهان جي شين جي "ness" کي ڊي بي ايم ايس سطح تي بيان ڪرڻ لاء، مناسب ٽيبل پابنديون استعمال ڪندي. ڊيٽابيس اڪثر ڪري ڪيترن ئي ذريعن کان معلومات تي مشتمل آهي، ۽ غائب قدرن لاءِ چيڪ متعارف ڪرائڻ توهان جي ڊيٽا جي سالميت کي بهتر بڻائيندو. ان کان علاوه، ڊي بي ايم ايس جي سطح تي نالن جي چڪاس جي موجودگي انهن کي توهان جي جاوا ڪوڊ ۾ گهٽائي ڇڏيندي: ڊيٽابيس مان ڊيٽا کي جاوا آبجڪس ۾ لوڊ ڪندي، توهان انهن جي موجودگي جي پڪ ڪري سگهو ٿا ۽ != nullپروگرام ڪوڊ مان غير ضروري "" هٽائي سگهو ٿا.

Null Object Pattern استعمال ڪريو

خاص Nullشيون ٺاهڻ جاوا ۾ NullPointerExcpetion کان بچڻ جو هڪ ٻيو طريقو آهي. اچو ته فرض ڪريون ته اسان جي ايپليڪيشن ۾ ڪجهه طريقو هڪ اعتراض واپس ڪري ٿو جيڪو پروگرام بعد ۾ ڪم ڪري ٿو ان جي طريقن کي ڪال ڪندي. مثال طور، طريقو Collection.iterator()ڪلاس جي ھڪڙي اعتراض کي موٽائي ٿو Iteratorجيڪو گڏ ڪرڻ لاء استعمال ڪيو ويندو آھي. پوءِ جيڪڏهن اصل شئي جو ڪو به اِيٽرٽر نه آهي، nullته توهان ان جي بدران هڪ خاص Null-آبجیکٹ واپس ڪري سگهو ٿا جنهن ۾ هڪ طريقو آهي hasNext()جيڪو هميشه موٽائي ٿو false. بس اهو ئي آهي، پيارا پڙهندڙ، هي اهو آهي جتي مان جاوا پروگرامن کي NullPointerException غلطين کان نجات حاصل ڪرڻ لاءِ پنهنجون تجويزون ختم ڪريان ٿو. توهان کي ساراهيو ويندو ته اهي سادي ۽ بوجھل ضابطا ڪيترا مفيد هوندا. هڪ ياد ڏياريندڙ جي طور تي، جيڪڏهن توهان جاوا پروگرامن ۾ ڪنهن ٻئي NullPointerException ٽرڪن کي حصيداري ڪرڻ چاهيو ٿا، تبصرن ۾ ائين ڪرڻ لاء آزاد محسوس ڪريو. خاص طور تي JavaRush شاگردن لاءِ ترجمو ٿيل. اصل
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION