نسخو 7 سان شروع ڪندي، جاوا وسيلن جو بهتر انتظام پيش ڪري ٿو جيڪي انهن سان ڪم ڪرڻ ختم ٿيڻ تي بند ٿيڻ گهرجن. اهڙن وسيلن ۾ شامل آهن، مثال طور، فائلون، اسٽريم، ڊيٽابيس ڪنيڪشن ۽ ساکٽ. هي مقصد هڪ خاص ٻوليءَ جي تعمير جي ڪوشش سان وسيلن سان پورو ڪيو ويندو آهي. ڪم ڪرڻ لاء هن خودڪار بند ڪرڻ لاء، هڪ خاص انٽرفيس ٺاهي وئي آهي
AutoCloseable
. جاوا 7 ۾، سڀئي وسيلا ڪلاس هن انٽرفيس کي لاڳو ڪن ٿا. ان جو دستخط هن طرح نظر اچي ٿو:
public interface AutoCloseable {
void close() throws Exception;
}
انٽرفيس هڪ طريقو بيان ڪري ٿو close()
جيڪو خودڪار طور تي سڏيو ويندو آهي انهن شين تي جيڪو تعمير ڪيو ويو آهي try-with-resources
. جيتوڻيڪ جاوا 7 ۾ ريسورس ڪلاسز هن انٽرفيس کي لاڳو ڪندا آهن، ڪيتريون ئي لائبريريون جيڪي توهان استعمال ڪندا آهن نه، يا ته لائبريري اڃا تائين اپڊيٽ نه ڪئي وئي آهي AutoCloseable انٽرفيس سان ڪم ڪرڻ لاءِ يا توهان وٽ صرف لائبريري کي اپڊيٽ ڪرڻ جي صلاحيت نه آهي. اڪثر ڪيسن ۾، اهو آساني سان حل ڪري سگهجي ٿو. وسيلن جي طبقي جو وارث ٿيو جنهن ۾ حصو وٺڻ گهرجي try-with-resources
. اچو ته مثال طور وٺون ITextRenderer
(فلائنگ سوسر پروجيڪٽ مان). سان ڪم ڪرڻ کان پوء ITextRenderer
، طريقو سڏيو وڃي ٿو finishPDF()
. عام طور تي توهان هن کي بلاڪ ۾ ڪندا finally
. پر جڏھن توھان ھڪڙو نئون ڪلاس ٺاھيو جيڪو ITextRenderer
انٽرفيس کي وڌائي ۽ لاڳو ڪري AutoCloseable
، توھان ان کي شامل ڪري سگھو ٿا try-with-resources
. نئون ڪلاس AutoCloseableITextRenderer
هن طرح نظر ايندو:
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
@Override
public void close() {
super.finishPDF();
}
}
اولاد ۾ اصل طبقي کي وڌائڻ سڀ کان وڌيڪ معقول حل آهي، ڇاڪاڻ ته نئون طبقو اڃا تائين هوندو ITextRenderer
. صورت ۾ اصل طبقي کي قرار ڏنو ويو آهي final
، مرکب استعمال ٿيڻ گهرجي. ۽ اھو اھو آھي جيڪو استعمال جھڙو نظر ايندو:
try (final AutoCloseableITextRenderer iTextRenderer = new AutoCloseableITextRenderer()) {
ByteArrayOutputStream out; // contains the data to be converted to PDF, not shown here.
iTextRenderer.setDocumentFromString(new String(out.toByteArray()));
iTextRenderer.layout();
iTextRenderer.createPDF(pdfOutputStream);
pdfOutputStream.flush();
}
اهو ئي سڀ ڪجهه آهي. close()
مهرباني ڪري نوٽ ڪريو ته مون هڪ طريقي سان استثنا نه ڪيو آهي AutoCloseableITextRenderer
. انٽرفيس جو Javadoc AutoCloseable
ھن بابت ھيٺيان ٿو چوي: جيتوڻيڪ انٽرفيس جي طريقي کي استثنا ڏيڻ جو اعلان ڪيو ويو آھي Exception
، ھن طريقي کي لاڳو ڪرڻ وارن کي سختي سان صلاح ڏني وئي آھي ته وڌيڪ مخصوص استثنا ڪلاس استعمال ڪن جڏھن ھن طريقي کي لاڳو ڪيو وڃي، يا جيڪڏھن اھو طريقو نٿو ڪري close()
سگھي ته استثناءَ کي ڪڏھن به نه اڇلايو وڃي. ناڪام ٿيڻ.
GO TO FULL VERSION