اڄ آئون توهان کي سادي ٽيڪنڪ ڏيکاريندس ته ڪيئن توهان جي ايپليڪيشنن ۾ NullPointerException کان بچڻ لاء. اهي پيروي ڪرڻ آسان آهن، پر خاص طور تي توهان جي ڪوڊ جي اعتبار ۽ معيار کي بهتر بڻائي ٿو. ان کان علاوه، منهنجي تجربي ۾، پهرين ٽپ توهان جي ڪوڊ جي معيار تي قابل ذڪر اثر هوندي. جيڪڏهن توهان ڪنهن ٻئي جاوا پروگرامنگ چالن کي ڄاڻو ٿا، انهن کي تبصرن ۾ حصيداري ڪرڻ لاء آزاد محسوس ڪريو.
استعمال ڪريو
اتي ڪيتريون ئي اوپن سورس لائبريريون آھن جيڪي
هي هڪ ٻيو سٺو جاوا پروگرامنگ ٽپ آهي جيڪو جوشوا بلوچ پنهنجي ڪتاب جاوا ۾ بيان ڪيو آهي: مؤثر پروگرامنگ. جڏهن خالي مجموعا يا صفون واپس ڪري رهيا آهيو، پڪ ڪريو ته ڪالنگ بنيادي طريقن جهڙوڪ NullPointerException اڇلائي
Call equals() and equalsIgnoreCase() طريقن کي اڻ ڄاتل اسٽرنگ لٽريريل تي اڻڄاتل اعتراض جي بجاءِ
ھميشه ھڪڙي طريقي کيequals()
ھڪڙي سڃاتل اسٽرنگ تي سڏين ٿا جيڪو توھان ڄاڻو ٿا ته نه آھي null
. طريقو equals()
symmetric آهي، يعني ڪال ڪندي a.equals(b)
۽ b.equals(a)
ساڳيو ئي نتيجو ڏيندو ( if a
and b
not 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()
کان ڪال ڪرڻ کان وٺي . اهو خاص طور تي لفافي طبقن جهڙوڪ , , يا . null
null
Integer
Float
Double
BigDecimal
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));
ٻاھر نڪتو: سچو سچو ڪوڙوnull
۽ اڃا تائين، استعمال ڪرڻ کان اڳ، محفوظ طريقن ۽ طبقن جي دستاويز کي پڙھڻ نه وساريو . هي هڪ ٻيو بهترين جاوا چالن مان آهي جيڪو وڏي ڪوشش جي ضرورت کان سواءِ وڏي سڌاري جي طرف وٺي وڃي ٿو.
null
ڪوشش ڪريو ھڪڙي طريقي سان واپس نه وڃو ، اھو بھتر آھي ته ھڪڙو خالي مجموعو واپس ڏيو
هي هڪ ٻيو سٺو جاوا پروگرامنگ ٽپ آهي جيڪو جوشوا بلوچ پنهنجي ڪتاب جاوا ۾ بيان ڪيو آهي: مؤثر پروگرامنگ. جڏهن خالي مجموعا يا صفون واپس ڪري رهيا آهيو، پڪ ڪريو ته ڪالنگ بنيادي طريقن جهڙوڪ NullPointerException اڇلائي size()
يا نه اڇلائي. length()
ڪلاس Collections
خاص طور تي خالي لسٽن، سيٽن ۽ لغتن جي آسان عملن جو اعلان ڪري ٿو: Collections.EMPTY_LIST
, Collections.EMPTY_SET
and 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 شاگردن لاءِ ترجمو ٿيل. اصل
GO TO FULL VERSION