JavaRush /جاوا بلاگ /Random-UR /فنکشنل انٹرفیس کا تعارف
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 استعمال کر رہے ہیں جو جاوا لیمبڈا ایکسپریشن سنٹیکس (Netbeans 8 Nightly builds) کو سپورٹ کرتا ہے - گمنام اندرونی کلاسز کا استعمال کرتے وقت آپ کو ایک اشارہ ملتا ہے: فنکشنل انٹرفیس کا تعارف - 3 یہ جاوا 8 میں فنکشنل انٹرفیس کے تصور کا ایک مختصر تعارف تھا اور انہیں کیسے لاگو کیا جا سکتا ہے۔ لیمبڈا اظہار کا استعمال کرتے ہوئے.
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION