কোন যুক্তি এবং কোনও ফেরতের মান সহ জাভা 8 ক্রিয়ামূলক ইন্টারফেস


109

জাভা 8 এমন একটি পদ্ধতির জন্য কী যা কিছুই নেয় না এবং কিছুই ফিরিয়ে দেয় না তার জন্য কার্যকারী ইন্টারফেস কী?

অর্থাৎ, রিটার্ন টাইপের Actionসাথে সি # প্যারামিটারলেসের সমান void?

উত্তর:


95

যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি কোনও পদ্ধতির সাথে একটি কার্যকরী ইন্টারফেস চান void m()। কোন ক্ষেত্রে আপনি কেবল একটি ব্যবহার করতে পারেন Runnable


29
Runnableএর ইন্টারফেসের স্পেসিফিকেশন নির্দেশ করে এটি Threadক্লাসে এক্সিকিউটেবল কোড সরবরাহ করা । Runnableথ্রেড দ্বারা মৃত্যুদন্ড কার্যকর করার উদ্দেশ্যে নয় এমন জায়গাটি ব্যবহার করা আমার পক্ষে ঠিক হবে না; বিভ্রান্তিকর বলে মনে হচ্ছে এটি একটি কার্যকরী ইন্টারফেসের স্পেসিফিকেশন পূরণ করে এবং ল্যাম্বদা সিনট্যাক্স ব্যবহার করে তৈরি করা যেতে পারে Runnableবলে সংজ্ঞায়িত করা হয় FunctionalInterface। আপনার নিজস্ব ক্রিয়ামূলক ইন্টারফেস কেন তৈরি করবেন না? দেখতে runnable দেখুন FunctionalInterface
TheSecretSquad

6
@TheSecretSquad (i) Runnableদ্বারা টীকাযুক্ত করা হয়েছে @FunctionalInterfaceএবং (ii) এমনকি একটি ল্যাম্বডা অভিব্যক্তির প্রসঙ্গে এটি একটি থ্রেডে কার্যকর করা হবে: যে থ্রেডে ল্যাম্বডা চালিত হয় যা বর্তমান থ্রেড হতে পারে ...
অ্যাসিয়ালিয়াস

9
আমি @ দ্য সেক্রেটস্কোয়াডের সাথে একমত, যদিও এটি কার্যকরী প্রয়োজনীয়তা পূরণ করে, এটি খুব শব্দার্থক বলে মনে হয় না, রান্নেবল সাধারণত থ্রেড তৈরির সাথে জড়িত। একটি ডুওয়ার্ক পদ্ধতি সহ একটি সাধারণ ওয়ার্কারাল ফাংশনাল ইন্টারফেসটি দুর্দান্ত হত। সম্পাদনা করুন: ওহো: stackoverflow.com/questions/27973294/...
jpangamarca

6
@ Jpangamarca এর "উফস" উপরের দিকে ঝাঁকুনি: তিনি যে নকল প্রশ্নটির সাথে যুক্ত Runnableছিলেন তার মন্তব্যে, ব্রায়ান গোয়েট নিশ্চিত করেছেন যে এই উদ্দেশ্যটি কেবল থ্রেডিং প্রসঙ্গে নয়, এই উদ্দেশ্যে ব্যবহার করা হয়েছিল।
জোশুয়া গোল্ডবার্গ

10
যদিও এই ক্ষেত্রেটি দেওয়া হয়েছে, তবে আমি মনে করি জাভাদোকটিকে আরও জেনেরিক করা উচিত: ডকস.অরাকল.com
জোশুয়া গোল্ডবার্গ

15

শুধু নিজের তৈরি করুন

@FunctionalInterface
public interface Procedure {
    void run();

    default Procedure andThen(Procedure after){
        return () -> {
            this.run();
            after.run();
        };
    }

    default Procedure compose(Procedure before){
        return () -> {
            before.run();
            this.run();
        };
    }
}

এবং এটি এটি ব্যবহার করুন

public static void main(String[] args){
    Procedure procedure1 = () -> System.out.print("Hello");
    Procedure procedure2 = () -> System.out.print("World");

    procedure1.andThen(procedure2).run();
    System.out.println();
    procedure1.compose(procedure2).run();

}

এবং আউটপুট

HelloWorld
WorldHello

আমি সত্যই মনে করি, প্রশ্নের নীতিমালাটি দেওয়া হয়েছে যে এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
কর্সিকা

0

@ ফাংশনাল ইনটারফেস কেবলমাত্র পদ্ধতি বিমূর্ত পদ্ধতিকে মঞ্জুরি দেয় তাই আপনি নীচে হিসাবে ল্যাম্বডা এক্সপ্রেশন দিয়ে সেই ইন্টারফেসটি ইনস্ট্যান্ট করতে পারেন এবং আপনি ইন্টারফেসের সদস্যদের অ্যাক্সেস করতে পারবেন

        @FunctionalInterface
        interface Hai {

            void m2();

            static void m1() {
                System.out.println("i m1 method:::");
            }

            default void log(String str) {
                System.out.println("i am log method:::" + str);
            }

        }

    public class Hello {
        public static void main(String[] args) {

            Hai hai = () -> {};
            hai.log("lets do it.");
            Hai.m1();

        }
    }


output:
i am log method:::lets do it.
i m1 method:::
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.