JavaRush /جاوا بلاگ /Random-UR /جاوا 8 گائیڈ۔ حصہ 2.
ramhead
سطح

جاوا 8 گائیڈ۔ حصہ 2.

گروپ میں شائع ہوا۔

تاریخ API

Java 8 java.time پیکیج میں مکمل طور پر نئی تاریخ اور وقت APIs پر مشتمل ہے۔ نئی Date API کا موازنہ Joda-Time لائبریری سے کیا جا سکتا ہے ، تاہم یہ ایک جیسا نہیں ہے۔ درج ذیل مثالیں نئے API کے اہم ترین حصوں کا احاطہ کریں گی۔
گھڑی
گھڑی موجودہ تاریخ اور وقت تک رسائی فراہم کرتی ہے۔ گھڑیاں ٹائم زونز سے واقف ہوتی ہیں اور اس لیے موجودہ وقت کو ملی سیکنڈ میں واپس کرنے کے لیے System.currentTimeMillis() کے بجائے استعمال کیا جا سکتا ہے ۔ اس قسم کے وقت کی درستگی کو بھی فوری کلاس سے ظاہر کیا جاتا ہے ۔ وراثت میں ملنے والی java.util.Date آبجیکٹ بنانے کے لیے فوری استعمال کیا جا سکتا ہے ۔ Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
ٹائم زونز
ٹائم زونز کی نمائندگی خلاصہ کلاس ZoneId سے ہوتی ہے ۔ شماریاتی فیکٹری کے طریقوں کا استعمال کرتے ہوئے ان تک آسانی سے رسائی حاصل کی جا سکتی ہے۔ ٹائم زون آف سیٹس کی وضاحت کرتے ہیں جو فوری اور مقامی تاریخ اور وقت کے درمیان تبدیل کرنے کے لیے اہم ہیں۔ System.out.println(ZoneId.getAvailableZoneIds()); // prints all available timezone ids ZoneId zone1 = ZoneId.of("Europe/Berlin"); ZoneId zone2 = ZoneId.of("Brazil/East"); System.out.println(zone1.getRules()); System.out.println(zone2.getRules()); // ZoneRules[currentStandardOffset=+01:00] // ZoneRules[currentStandardOffset=-03:00]
لوکل ٹائم
لوکل ٹائم ٹائم زون کے بغیر وقت دکھاتا ہے، مثال کے طور پر 17:30:15۔ مندرجہ ذیل مثال اوپر بیان کردہ ٹائم زونز کے لیے دو مقامی ٹائم آبجیکٹ بناتی ہے۔ پھر ہم دونوں اشیاء کا موازنہ کرتے ہیں اور ان کے درمیان گھنٹوں اور منٹوں میں فرق کا حساب لگاتے ہیں۔ LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.println(now1.isBefore(now2)); // false long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); // -3 System.out.println(minutesBetween); // -239 لوکل ٹائم مختلف فیکٹری طریقوں کے ساتھ آتا ہے تاکہ انسٹیٹیوشن کو آسان بنایا جا سکے، بشمول سٹرنگ پارسنگ۔ LocalTime late = LocalTime.of(23, 59, 59); System.out.println(late); // 23:59:59 DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedTime(FormatStyle.SHORT) .withLocale(Locale.GERMAN); LocalTime leetTime = LocalTime.parse("13:37", germanFormatter); System.out.println(leetTime); // 13:37
لوکل ڈیٹ
لوکل ڈیٹ ایک مخصوص تاریخ دکھاتا ہے، مثال کے طور پر 2014-03-11۔ مثالیں ناقابل تغیر ہیں اور لوکل ٹائم کی طرح کام کرتی ہیں۔ مثال یہ بتاتی ہے کہ دنوں، مہینوں یا سالوں کو جوڑ کر یا گھٹا کر نئی تاریخ کا حساب کیسے لگایا جائے۔ ذہن میں رکھیں کہ کسی شے پر ہر آپریشن ایک نئی چیز لوٹاتا ہے۔ LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); LocalDate yesterday = tomorrow.minusDays(2); LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); DayOfWeek dayOfWeek = independenceDay.getDayOfWeek(); System.out.println(dayOfWeek); // FRIDAY سٹرنگ سے لوکل ڈیٹ کو پارس کرنا اتنا ہی آسان ہے جتنا لوکل ٹائم کو پارس کرنا: DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter); System.out.println(xmas); // 2014-12-24
لوکل ڈیٹ ٹائم
LocalDateTime تاریخ کا وقت دکھاتا ہے۔ یہ اوپر دی گئی تاریخ اور وقت کا مجموعہ ہے، ایک کاپی میں۔ LocalDateTime مثالیں ناقابل تغیر ہیں اور LocalTime اور LocalDate کی طرح کام کرتی ہیں۔ ہم مثالی جائیداد کی قدروں کو بازیافت کرنے کے طریقے استعمال کر سکتے ہیں جن کی ہمیں ضرورت ہے: LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59); DayOfWeek dayOfWeek = sylvester.getDayOfWeek(); System.out.println(dayOfWeek); // WEDNESDAY Month month = sylvester.getMonth(); System.out.println(month); // DECEMBER long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY); System.out.println(minuteOfDay); // 1439 اضافی ٹائم زون کی معلومات کے ساتھ، مثال کو فوری میں تبدیل کیا جا سکتا ہے۔ فوری طور پر java.util.Date سے وراثت میں ملنے والی پرانی اقسام میں آسانی سے تبدیل کیا جا سکتا ہے۔ Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 ڈیٹ ٹائم فارمیٹ کرنا اسی طرح کام کرتا ہے جیسے کسی تاریخ یا وقت کو فارمیٹ کرنا۔ پہلے سے طے شدہ تاریخ کے فارمیٹس کو استعمال کرنے کے بجائے، ہم دستی طور پر متعین فارمیٹس استعمال کر سکتے ہیں۔ DateTimeFormatter formatter = DateTimeFormatter .ofPattern("MMM dd, yyyy - HH:mm"); LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter); String string = formatter.format(parsed); System.out.println(string); // Nov 03, 2014 - 07:13 java.text.NumberFormat کے برعکس، نیا DateTimeFormatter ناقابل تغیر اور تھریڈ محفوظ ہے۔ تحریری شکلوں کے لیے نحو کے بارے میں مزید معلومات کے لیے، یہاں پڑھیں ۔

تشریحات

جاوا 8 میں تشریحات قابل تکرار ہیں۔ آئیے ایک مثال دیکھیں کہ یہ کیسے کام کرتا ہے۔ شروع کرنے کے لیے، ہم ایک تشریحی ریپر کی وضاحت کریں گے جو درست تشریحات کی ایک صف کو ذخیرہ کرتا ہے: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 ہمیں @Repeatable تشریح کا اعلان کرکے ایک ہی قسم کے متعدد تشریحات استعمال کرنے کے قابل بناتا ہے۔ آپشن 1: کنٹینر تشریح (پرانا اسکول) استعمال کرنا (جاوا 8 ہمیں @ دوبارہ قابل تشریح کا اعلان کرکے ایک ہی قسم کی متعدد تشریحات استعمال کرنے کی اجازت دیتا ہے ۔) آپشن 1: تشریح کنٹینر کا استعمال کرنا (پرانا اسکول) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} آپشن 2: دوبارہ قابل تشریح کا استعمال کرنا ( نئی خصوصیت) @Hint("hint1") @Hint("hint2") class Person {} آپشن دو کا استعمال کرتے ہوئے، جاوا کمپائلر واضح طور پر @Hint تشریح سیٹ کرتا ہے۔ عکاسی کے ذریعے تشریحی معلومات کو پڑھنے کے لیے یہ ضروری ہے۔ اگرچہ ہم نے Person کلاس کے لیے @Hints Hint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 تشریح کا اعلان نہیں کیا ہے ، لیکن اسے getAnnotation(Hints.class) طریقہ استعمال کرکے پڑھا جا سکتا ہے ۔ تاہم، ایک زیادہ آسان طریقہ getAnnotationsByType ہے، جو @Hint تشریح کا استعمال کرتے ہوئے تمام تشریحات تک رسائی فراہم کرتا ہے ۔ اس کے علاوہ، جاوا 8 میں تشریحات کا استعمال دو مقاصد تک پھیلا ہوا ہے: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

یہ سب کچھ ہے

میرا جاوا 8 پروگرامنگ ٹیوٹوریل مکمل ہو گیا ہے۔ اگر آپ JDK 8 میں تمام نئی کلاسز اور API خصوصیات کے بارے میں مزید جاننا چاہتے ہیں، تو بس میرا اگلا مضمون پڑھیں۔ اس سے آپ کو JDK 8 میں تمام نئی کلاسوں اور پوشیدہ خصوصیات کو سمجھنے میں مدد ملے گی، جیسے Arrays.parallelSort ، StampedLock ، اور CompletableFuture ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION