JavaRush /جاوا بلاگ /Random-UR /جاوا فنکشنل انٹرفیس

جاوا فنکشنل انٹرفیس

گروپ میں شائع ہوا۔
جاوا میں ایک فنکشنل انٹرفیس ایک انٹرفیس ہے جس میں صرف 1 تجریدی طریقہ ہوتا ہے۔ بنیادی مقصد اسے لیمبڈا اظہار اور طریقہ کے حوالہ جات میں استعمال کرنا ہے۔
جاوا فنکشنل انٹرفیس - 1
1 تجریدی طریقہ کی موجودگی واحد شرط ہے، لہذا ایک فعال انٹرفیس بھی defaultطریقوں پر مشتمل ہوسکتا ہے static۔ آپ فنکشنل انٹرفیس میں @FunctionalInterface تشریح شامل کر سکتے ہیں۔ اس کی ضرورت نہیں ہے، لیکن اگر یہ تشریح موجود ہے، اگر 1 سے زیادہ یا کم تجریدی طریقہ ہو تو کوڈ مرتب نہیں ہوگا۔ @FunctionalInterface شامل کرنے کی سفارش کی جاتی ہے۔ یہ آپ کو لیمبڈا ایکسپریشنز میں انٹرفیس کو استعمال کرنے کی اجازت دے گا اس فکر کے بغیر کہ کوئی انٹرفیس میں ایک نیا تجریدی طریقہ شامل کرے گا اور یہ فعال ہونا بند کردے گا۔ Java میں بلٹ ان فنکشنل انٹرفیس موجود ہیں java.util.function۔ میں ان پر تفصیل سے بات نہیں کروں گا۔ میں نوٹ کرتا ہوں کہ سب سے زیادہ استعمال ہونے والے ہیں: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> اور ان کی دو شکلیں۔ مزید تفصیلات دستاویزات کے صفحہ پر مل سکتی ہیں: پیکیج java.util.function
import java.util.function.Predicate;

//Определяем свой функциональный интерфейс
@FunctionalInterface
interface MyPredicate {
    boolean test(Integer value);
}

public class Tester {
    public static void main(String[] args) throws Exception {
        MyPredicate myPredicate = x -> x > 0;
        System.out.println(myPredicate.test(10));   //true

        //Аналогично, но используется встроенный функциональный интерфейс java.util.function.Predicate
        Predicate<Integer> predicate = x -> x > 0;
        System.out.println(predicate.test(-10));    //false
    }
}
لیکن اس سے پتہ چلتا ہے کہ جاوا لینگویج اسپیسیفیکیشن میں ایک لطیف نکتہ بیان کیا گیا ہے: "انٹرفیس آبجیکٹ سے وراثت میں نہیں آتے ہیں، بلکہ واضح طور پر بہت سے طریقوں کو آبجیکٹ کے طور پر بیان کرتے ہیں۔" اس کا مطلب ہے کہ فنکشنل انٹرفیس میں کلاس میں بیان کردہ تجریدی طریقے بھی شامل ہو سکتے ہیں Object۔ نیچے دیا گیا کوڈ درست ہے، کوئی کمپلیشن یا رن ٹائم غلطیاں نہیں ہوں گی۔
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
انٹرویو کے دوران محتاط رہیں! اچھی قسمت!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION