JavaRush /בלוג Java /Random-HE /Java 7 נסה עם משאבים
DarthVictor
רָמָה

Java 7 נסה עם משאבים

פורסם בקבוצה
החל מגרסה 7, Java מציעה ניהול משופר של משאבים שאמורים להיסגר בסיום העבודה איתם. משאבים כאלה כוללים, למשל, קבצים, זרמים, חיבורי מסד נתונים ושקעים. מטרה זו מוגשת על ידי בניית שפה מיוחדת לנסות עם משאבים. על מנת שסגירה אוטומטית זו תפעל, נוצר ממשק מיוחד AutoCloseable. Java 7 נסה עם משאבים - 1ב-Java 7, כל מחלקות המשאבים מיישמות ממשק זה. החתימה שלו נראית כך:
public interface AutoCloseable {
    void close() throws Exception;
}
הממשק מכריז על שיטה close()שנקראת אוטומטית על האובייקטים המוגשים על ידי המבנה try-with-resources. למרות שמחלקות המשאבים ב-Java 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