कस्टम फ़ंक्शनल इंटरफ़ेस
@FunctionalInterface के साथ अपना इंटरफ़ेस बनाएँ
कस्टम फ़ंक्शनल इंटरफ़ेस, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
किसी इंटरफ़ेस को कार्यात्मक क्या बनाता है
एक कार्यात्मक इंटरफ़ेस में ठीक एक अमूर्त विधि (SAM) होती है। लैम्ब्डा इसी एकल विधि को लागू करता है।
- डिफ़ॉल्ट और स्थैतिक विधियाँ इस सीमा में नहीं गिनी जातीं।
interface Greeter {
String greet(String name);
}
public class Main {
public static void main(String[] args) {
Greeter g = name -> "Hello, " + name;
System.out.println(g.greet("Ada"));
}
}@FunctionalInterface एनोटेशन
@FunctionalInterface कंपाइलर को एकल-अमूर्त-विधि नियम लागू करने के लिए कहता है। यदि आप गलती से दूसरी अमूर्त विधि जोड़ देते हैं, तो संकलन विफल हो जाता है।
@FunctionalInterface
interface Calculator {
int compute(int a, int b);
}
public class Main {
public static void main(String[] args) {
Calculator add = (a, b) -> a + b;
System.out.println(add.compute(3, 4));
}
}एनोटेशन क्यों उपयोगी है
एनोटेशन आपके उद्देश्य को दर्ज करता है और अनुबंध की सुरक्षा करता है। इसके बिना भी इंटरफ़ेस कार्यात्मक रूप से काम करता है, लेकिन कोई सहकर्मी दूसरी अमूर्त विधि जोड़कर इसे तोड़ सकता है।
@FunctionalInterface
interface Transformer {
String apply(String input);
}
public class Main {
public static void main(String[] args) {
Transformer reverse = s -> new StringBuilder(s).reverse().toString();
System.out.println(reverse.apply("abc"));
}
}जेनेरिक के साथ कस्टम इंटरफ़ेस
अंतर्निर्मित इंटरफ़ेस की तरह आपका इंटरफ़ेस भी जेनेरिक हो सकता है।
@FunctionalInterface
interface Converter<S, T> {
T convert(S source);
}
public class Main {
public static void main(String[] args) {
Converter<String, Integer> toInt = Integer::parseInt;
System.out.println(toInt.convert("123") + 1);
}
}डिफ़ॉल्ट विधियों की अनुमति है
किसी कार्यात्मक इंटरफ़ेस में default विधियाँ हो सकती हैं। वे एकल-अमूर्त-विधि नियम को तोड़े बिना व्यवहार जोड़ती हैं।
@FunctionalInterface
interface Operation {
int apply(int x);
default Operation then(Operation next) {
return x -> next.apply(this.apply(x));
}
}
public class Main {
public static void main(String[] args) {
Operation inc = x -> x + 1;
Operation dbl = x -> x * 2;
System.out.println(inc.then(dbl).apply(5));
}
}स्थैतिक विधियों की भी अनुमति है
स्थैतिक विधियाँ फ़ैक्टरी की तरह काम कर सकती हैं, जैसे Function.identity()।
@FunctionalInterface
interface Mapper {
int map(int x);
static Mapper identity() {
return x -> x;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(Mapper.identity().map(99));
}
}जाँच-आवश्यक अपवाद उत्पन्न करना
यदि आपकी अमूर्त विधि जाँच-आवश्यक अपवाद घोषित करती है, तो लैम्ब्डा उसे उत्पन्न कर सकता है। अंतर्निर्मित Function ऐसा नहीं कर सकता, जो अपना इंटरफ़ेस परिभाषित करने का एक कारण है।
@FunctionalInterface
interface RiskyParser {
int parse(String s) throws NumberFormatException;
}
public class Main {
public static void main(String[] args) {
RiskyParser p = Integer::parseInt;
System.out.println(p.parse("77"));
}
}कस्टम इंटरफ़ेस को विधियों में भेजना
आपका इंटरफ़ेस एक पैरामीटर प्रकार बन जाता है, जिससे कॉल करने वाले लैम्ब्डा के ज़रिए व्यवहार दे सकते हैं।
@FunctionalInterface
interface IntCombiner {
int combine(int a, int b);
}
public class Main {
static int reduce(int[] arr, IntCombiner c) {
int acc = arr[0];
for (int i = 1; i < arr.length; i++) acc = c.combine(acc, arr[i]);
return acc;
}
public static void main(String[] args) {
int[] data = {1, 2, 3, 4};
System.out.println(reduce(data, (a, b) -> a + b));
}
}तीन-आर्ग्युमेंट वाला इंटरफ़ेस
JDK केवल एक और दो आर्ग्युमेंट वाले इंटरफ़ेस उपलब्ध कराता है। तीन या अधिक आर्ग्युमेंट के लिए अपना इंटरफ़ेस परिभाषित करें।
@FunctionalInterface
interface TriFunction<A, B, C, R> {
R apply(A a, B b, C c);
}
public class Main {
public static void main(String[] args) {
TriFunction<Integer, Integer, Integer, Integer> sum3 = (a, b, c) -> a + b + c;
System.out.println(sum3.apply(1, 2, 3));
}
}विधि संदर्भ कस्टम इंटरफ़ेस के अनुकूल होते हैं
जिस विधि का सिग्नेचर SAM से मेल खाता है, उसे विधि संदर्भ के रूप में दिया जा सकता है।
@FunctionalInterface
interface StringTest {
boolean check(String s);
}
public class Main {
public static void main(String[] args) {
StringTest blank = String::isBlank;
System.out.println(blank.check(" "));
}
}अनाम क्लास बनाम लैम्ब्डा
कार्यात्मक इंटरफ़ेस लागू करने वाली अनाम क्लास के लिए लैम्ब्डा एक संक्षिप्त विकल्प है। दोनों समान व्यवहार देते हैं।
@FunctionalInterface
interface Action {
void run();
}
public class Main {
public static void main(String[] args) {
Action old = new Action() {
public void run() { System.out.println("anonymous"); }
};
Action neo = () -> System.out.println("lambda");
old.run();
neo.run();
}
}त्वरित जाँच
@FunctionalInterface क्या सुनिश्चित करता है?
पुनरावलोकन
आपने अपने कार्यात्मक इंटरफ़ेस परिभाषित किए:
- कार्यात्मक इंटरफ़ेस में ठीक एक अमूर्त विधि (SAM) होती है।
@FunctionalInterfaceसंकलन के समय इस नियम को लागू करता है।- डिफ़ॉल्ट और स्थैतिक विधियाँ, जेनेरिक तथा जाँच-आवश्यक अपवाद सभी अनुमत हैं।
- कस्टम इंटरफ़ेस उन आवश्यकताओं को पूरा करते हैं जिन्हें JDK कवर नहीं करता, जैसे तीन-आर्ग्युमेंट वाले फ़ंक्शन या जाँच-आवश्यक अपवाद वाले लैम्ब्डा।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “कस्टम फ़ंक्शनल इंटरफ़ेस” पाठ निःशुल्क है?
हाँ—“कस्टम फ़ंक्शनल इंटरफ़ेस” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कस्टम फ़ंक्शनल इंटरफ़ेस” में मैं क्या सीखूँगा?
@FunctionalInterface के साथ अपना इंटरफ़ेस बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“कस्टम फ़ंक्शनल इंटरफ़ेस” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Function और BiFunction
- Supplier और Consumer
- Predicate और Composition
- कस्टम फ़ंक्शनल इंटरफ़ेस