जावा 8 फंक्शनल इंटरफेस एक ऐसी विधि के लिए है जो कुछ भी नहीं लेता है और कुछ भी नहीं देता है?
यानी, रिटर्न प्रकार के Actionसाथ C # पैरामीटर के बराबर void?
जावा 8 फंक्शनल इंटरफेस एक ऐसी विधि के लिए है जो कुछ भी नहीं लेता है और कुछ भी नहीं देता है?
यानी, रिटर्न प्रकार के Actionसाथ C # पैरामीटर के बराबर void?
जवाबों:
अगर मैं सही ढंग से समझूं तो आप एक विधि के साथ एक कार्यात्मक इंटरफ़ेस चाहते हैं void m()। जिस स्थिति में आप बस एक का उपयोग कर सकते हैं Runnable।
Runnableके साथ टिप्पणी की जाती है @FunctionalInterfaceऔर (ii) यहां तक कि एक लैम्ब्डा अभिव्यक्ति यह एक धागे पर निष्पादित किया जाएगा के संदर्भ में: धागा, जिसमें लैम्ब्डा चलाया जाता है जो वर्तमान धागा हो सकता है ...
Runnableइस उद्देश्य के लिए इस्तेमाल किया जाना था, न कि केवल संदर्भों को फैलाने के लिए।
बस अपना बना लो
@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
@FunctionalInterface केवल विधि अमूर्त विधि की अनुमति देता है इसलिए आप उस इंटरफ़ेस को नीचे दिए गए लंबोदर एक्सप्रेशन के रूप में देख सकते हैं और आप इंटरफ़ेस सदस्यों तक पहुँच सकते हैं
@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:::
Runnableयह इंटरफ़ेस विनिर्देश इंगित करता है कि यहThreadकक्षा के लिए निष्पादन योग्य कोड प्रदान करना है । यह मेरे लिए सही नहीं लगता है किRunnableजहां यह एक थ्रेड द्वारा निष्पादन के लिए इरादा नहीं है; भ्रामक लगता है।Runnableएक के रूप में परिभाषित किया गया हैFunctionalInterface, क्योंकि यह एक कार्यात्मक इंटरफ़ेस के विनिर्देश को पूरा करती है और लैम्ब्डा वाक्य रचना का उपयोग कर बनाया जा सकता है। अपना स्वयं का कार्यात्मक इंटरफ़ेस क्यों नहीं बनाएं? देख Runnable , देख FunctionalInterface