JavaRush /جاوا بلاگ /Random-UR /جاوا 7 وسائل کے ساتھ کوشش کریں۔
DarthVictor
سطح

جاوا 7 وسائل کے ساتھ کوشش کریں۔

گروپ میں شائع ہوا۔
ورژن 7 کے ساتھ شروع کرتے ہوئے، جاوا وسائل کے بہتر انتظام کی پیشکش کرتا ہے جو ان کے ساتھ کام کرنے کے بعد بند ہو جانا چاہیے۔ اس طرح کے وسائل میں، مثال کے طور پر، فائلیں، اسٹریمز، ڈیٹا بیس کنکشن اور ساکٹ شامل ہیں۔ یہ مقصد ایک خصوصی زبان کی تعمیر کے ذریعہ فراہم کیا جاتا ہے جو وسائل کے ساتھ کوشش کرتے ہیں۔ کام کرنے کے لیے اس خودکار بندش کے لیے، ایک خصوصی انٹرفیس بنایا گیا ہے AutoCloseable۔ جاوا 7 وسائل کے ساتھ کوشش کریں - 1جاوا 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()اختیار نہیں کر سکتا تو مستثنیات کو بالکل بھی نہ پھینکیں۔ ناکام
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION