دوشنبه, 10 تیر 1392 ساعت 07:47

قابلیت های جدید در JAVA 8

نوشته شده توسط  رستگار
این مورد را ارزیابی کنید
(0 رای‌ها)

با سلام خدمت دوستان و همکاران عزیزم
از این پس بنا دارم تا در طی چند پست آتی از امکانات جدیدی که در جاوا 8 تعبیه شده است، اطلاعاتی را هر چند مختصر و ناچیز در اختیار دوستان قرار دهم.
همانطوری که شاید خیلی از شما در جریان هستید، جاوا 8 قراره بر طبق آخرین زمانبندی ارائه شده تا مارچ 2014 در اختیار عموم(البته ما ایرانی ها هم به لطف VPN (البته می گن آقای روحانی اولین کاری که تو راس کارهاش قرار داده اینه که سایت اوراکل رو از آمریکا برامون باز کنه. کلیدش رو هم که همه دیدیم داره.) می تونیم دانلود کنیم) قرار بگیره. تا حالا که خبر ها حاکی از اینه که همه چیز داره خوب پیش می ره و اونها طبق زمانبندی هستن(عین تونل نیایش که طبق زمانبندی درست شد و قابل بهره برداری هست ولی یادشون رفته که دو طرفش هم باید باز باشه). اینطور که تو ساز و دهل کردن ایمپروومنت های خوبی توش داشتند طوری که کاملا بکوارد کامپتیبل (!) هم هست. فیچر های جدیدش هم که دهنو آب می ندازه مثل پروژه ی لامبدا که باعث می شه کسی از کدی که می نویسی به این راحتی ها سر در نیاره و می تونی باهاش کلی پز بدی که مثلا خیلی خفنی(منم که عاشق اینم که کسی از کدم سر در نیاره و در عین حال با کلاس باشه مثل خارجی ها).
یه خبر خوب هم واسه کسایی که با اینتلیجی آیدیا کار می کنن دارم که می گن یه ساپورت اساسی از جاوا 8 می کنه طوری که نمی زاره آب تو دل آیدیا کارها تکون بخوره (اصلا ادعا کرده طوری جاوا 8 رو در آغوش کشیده که حتی محمود نتونست هوگو رو اینطوری در آغوش بگیره).
حالا از این حرف ها که بگذریم می رسیم به بحث امروزمون یعنی اینرفیس ها تو جاوا 8.
Interface Improvements
Interface ها می تونند دیگه از این به بعد متد static هم داشته باشن. مثلا متد "naturalOrder" به “java.util.Comparator” اضافه شده است و خوب اساتید مستحضر هستند که “java.util.Comparator” سابق بر این یک Interface ساده بیش نبوده با دو متد خشک و خالی " compare" و " equals" که هیچ پیادسازی هم نداشتند(مگه اینترفیس هم پیاده سازی داره؟! حرف تو دهن ما نذارید؟) حالا به پیادسازی "naturalOrder" یه نگاه بندازیم:


public static <T extends Comparable<? super T>>
Comparator<T> naturalOrder() {
return (Comparator<T>)
Comparators.NaturalOrderComparator.INSTANCE;
}

 

یک کاربرد معمول واسه این قابلیت اینه که فرض کنید در گذشته یه Interface داشتید به نام Foo(خدا وکیلی خیلی کلاس مهمیه. مخترعین خیلی بهش مدیون هستند. اگه نبود من بعید می دونم کسی می تونست اختراعشو توجیه کنه) بنابراین مجبور بودید یک کلاس Util به نام مثلا Foos درست می کردید که یه سری متد Static داشته که می تونستند Instance های Foo رو تولید کنند و یا باهاشون کار کنند. ولی حالا می تونید این کلاسه رودور بریزید و متد هاش رو هم(از اونجا که static هستند) مستقیم بیارید تو Interface مورد نظر.
علاوه بر این، نکته مهمتر اینه که، از این به بعد Interface ها می تونند متد های default با پیادسازی در خودشون داشته باشند(یه دفعه بگید می خواید کلا Interface ها بتونند پیادسازی هم داشته باشند تا از این طریق بتونید Interface رو از صحنه ی روزگار محو کنید). برای مثال متد "forEach" به "java.lang.Iterable" اضافه شده است:

 

public default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}


تا قبل این یک گناه کبیره بود اگه می خواستید یه متد جدید به یک Interface از Library ها تون اضافه می کردید. اگه این کار رو می کردید باعث می شد تمام پروژ ها تون که اون Interface رو پیاده کردند خراب بشند و دیگه برنامتون کار نکنه(و به قول معروف عین ...ر تو گل گیر می کردید) ولی حالا به برکت پیادسازی default متدهای Interface، متد های جدید می تونند به راحتی به Interface اضافه شده بدون این که خللی توی اجرای برنامه های قبل به وجود بیاد. در جاوا 8 تعداد زیادی متد به Interface های Core JDK اضافه شده است.
هنوز چند تا چیزه دیگه مونده که در مورد Interface ها باید بگم ولی از اونجا که می دونم قندتون افتاده بقیه رو می زارم واسه پست بعدی.
خسته نباشید
رستگار

خواندن 317009 دفعه آخرین ویرایش در شنبه, 15 تیر 1392 ساعت 04:14
محتوای بیشتر در این بخش: قابلیت های جدید در JAVA 8 -ادامه »

نظر دادن

از پر شدن تمامی موارد الزامی ستاره‌دار (*) اطمینان حاصل کنید. کد HTML مجاز نیست.

آدرس

map

 تهران، خیابان طالقانی، بین خیابان سپهبد قرنی و خیابان نجات اللهی، جنب بانک ملت، پلاک 304، واحد 12

گالری تصاویر