JavaRush /جاوا بلاگ /Random-SD /فنڪشنل انٽرفيس جو تعارف
minuteman
سطح

فنڪشنل انٽرفيس جو تعارف

گروپ ۾ شايع ٿيل
مھرباني ڪري گھڻو ٽولو نه ڪريو، مان صرف مضمونن جو ترجمو ڪرڻ شروع ڪري رھيو آھيان فنڪشنل انٽرفيس جو تعارف - 1

فنڪشنل انٽرفيس جو تعارف - جاوا 8 ۾ ٻيهر ٺاهيل تصور

دنيا ۾ هر جاوا ڊولپر گهٽ ۾ گهٽ هڪ ڀيرو هيٺ ڏنل انٽرفيس مان هڪ استعمال ڪيو آهي: java.lang.Runnable, java.awt.event.ActionListener, java.util.Comparator, java.util.concurrent.Callable. انهن سڀني ۾ هڪ شيءِ مشترڪ آهي، ۽ اها آهي ته انهن سڀني جو فقط هڪ طريقو آهي. JDK ۾ اهڙا ٻيا ڪيترائي انٽرفيس آهن، ۽ ٻيا جاوا ڊولپرز پاران ٺاهيل آهن. اهي انٽرفيس پڻ سڃاتل آهن Single Abstract Method interfaces(SAM انٽرفيس). انهن انٽرفيس کي استعمال ڪرڻ لاءِ سڀ کان وڌيڪ مشهور طريقن مان هڪ آهي گمنام اندروني طبقن ٺاهڻ جيڪي انهن انٽرفيس کي استعمال ڪن ٿا، جيئن هيٺ ڏنل مثال ۾:
public class AnonymousInnerClassTest {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("A thread created and running...");
            }
        }).start();
    }
}
جاوا 8 ۾، SAM تصور کي ٻيهر بڻايو ويو آهي ۽ فنڪشنل انٽرفيس سڏيو ويندو آهي. اهي لامبڊا اظهار، طريقي جي حوالي سان، ۽ حوالن جي تعمير ڪندڙ استعمال ڪندي نمائندگي ڪري سگھجن ٿيون. ھڪڙو نئون @FunctionalInterface تشريح ٺاھيو ويو آھي جيڪو ڪمپلر سطح تي غلطيون اڇلائڻ لاءِ استعمال ڪيو ويندو آھي جڏھن انٽرفيس جيڪو توھان بيان ڪيو آھي اھو فنڪشنل سطح تي ڪم نٿو ڪري. اچو ته هڪ سادي فنڪشنل انٽرفيس کي هڪ تجريدي طريقي سان ڏسو:
@FunctionalInterface
public interface SimpleFunInterface {
    public void doWork();
}
هڪ انٽرفيس به هڪ طبقي مان خلاصي طريقن جو اعلان ڪري سگهي ٿو java.lang.Object، پر هن صورت ۾ انٽرفيس کي به فعلي قرار ڏئي سگهجي ٿو:
@FunctionalInterface
public interface SimpleFuncInterface {
    public void doWork();
    public String toString();
    public Boolean equals(Object o);
}
جيترو جلدي توهان انٽرفيس ۾ هڪ ٻيو خلاصو طريقو شامل ڪيو آهي، IDE ان کي غلط طور تي نشان لڳندو جيئن تصوير ۾: فنڪشنل انٽرفيس جو تعارف - 2 هڪ انٽرفيس ٻئي انٽرفيس مان ورثي ۾ ملي سگهي ٿو؛ جيڪڏهن انٽرفيس هڪ فنڪشنل انٽرفيس مان ورثي ۾ ملي ٿو ۽ ان ۾ نوان تجريدي طريقا شامل نه آهن، ته پوءِ اهو انٽرفيس به ڪم ڪندڙ آهي. پر هڪ انٽرفيس صرف هڪ تجريدي طريقو ۽ ڪيترن ئي ڊفالٽ طريقن تي مشتمل ٿي سگهي ٿو، ۽ اهو اڃا تائين فنڪشنل سمجهيو ويندو.
@FunctionalInterface
public interface ComplexFunctionalInterface extends SimpleFuncInterface {
    default public void doSomeWork() {
        System.out.println("Doing some work in interface impl...");
    }
    default public void doSomeWork() {
        System.out.println("Doing some other work in interface impl...");
    }
}
مٿين مثال اڃا تائين هڪ فنڪشنل انٽرفيس آهي. ھاڻي اچو ته ڏسون ته ڪيئن اسان لامبڊا ايڪسپريس استعمال ڪري سگھون ٿا ھڪڙي گمنام اندروني طبقي کي تبديل ڪرڻ لاءِ فنڪشنل انٽرفيس کي لاڳو ڪرڻ لاءِ:
/*
*Implementation the interface by creating an
*anonymoous inner class versus using
*lambda expression.
*/
public class SimpleFunInterfaceTest {
    public static void main(String[] args) {
        carryOutWork(new SimpleFunInterface() {
            @Override
            public void doWork() {
                System.out.println("Do work in SimpleFun impl...");
            }
        });
        carryOutWork(() -> System.out.println("Do work in lambda exp impl..."));
    }
    public static void carryOutWork(SimpleFuncInterface sfi) {
        sfi.work();
    }
}
پروگرام جو نتيجو هن ريت ٿيندو:
Do work in SimpleFun impl...
Do work in lambda exp impl...
ان صورت ۾ جيڪڏهن توهان هڪ IDE استعمال ڪري رهيا آهيو جيڪو Java lambda ايڪسپريشن نحو کي سپورٽ ڪري ٿو (Netbeans 8 Nightly builds) - توهان کي هڪ اشارو ملي ٿو جڏهن گمنام اندروني ڪلاس استعمال ڪندي: فنڪشنل انٽرفيس جو تعارف - 3 هي جاوا 8 ۾ فنڪشنل انٽرفيس جي تصور جو مختصر تعارف هو ۽ انهن کي ڪيئن لاڳو ڪري سگهجي ٿو. lambda اظهار استعمال ڪندي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION