Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java 8 में इंटरफेस संवर्द्धन (Interface Enhancements)


Java 8 इंटरफेस में डिफ़ॉल्ट मेथड कार्यान्वयन की एक नई अवधारणा पेश करता है। यह क्षमता बैकवर्ड कम्पैटिबिलिटी के लिए जोड़ी गई है ताकि पुराने इंटरफेस Java 8 की लैम्ब्डा एक्सप्रेशन क्षमता का लाभ उठा सकें।

उदाहरण के लिए, List या Collection इंटरफेस में forEach मेथड डिक्लेरेशन नहीं है। इस तरह के मेथड को जोड़ने से केवल कलेक्शन फ्रेमवर्क इम्प्लीमेंटेशन्स टूट जाएंगे। Java 8 डिफ़ॉल्ट मेथड पेश करता है ताकि List/Collection इंटरफेस में forEach मेथड का डिफ़ॉल्ट कार्यान्वयन हो सके, और इन इंटरफेसेस को इम्प्लीमेंट करने वाली क्लास को इसे इम्प्लीमेंट करने की आवश्यकता नहीं है।

Java 8 से एक इंटरफेस में स्टेटिक हेल्पर मेथड्स भी हो सकते हैं।

डिफ़ॉल्ट मेथड्स (Default Methods)

  • default कीवर्ड के साथ घोषित
  • मेथड बॉडी होती है (कार्यान्वयन)
  • इम्प्लीमेंटिंग क्लासेस को विरासत में मिलते हैं
  • ओवरराइड किए जा सकते हैं (वैकल्पिक)
  • मल्टीपल इंटरफेस में समान डिफ़ॉल्ट मेथड होने पर अनिवार्य ओवरराइड आवश्यक

स्टेटिक मेथड्स (Static Methods)

  • static कीवर्ड के साथ घोषित
  • इंटरफेस नाम से कॉल: InterfaceName.method()
  • विरासत में नहीं मिलते
  • ओवरराइड नहीं किए जा सकते (केवल हाइडिंग)
  • यूटिलिटी/फैक्टरी मेथड्स के लिए आदर्श

संयुक्त उदाहरण

interface Vehicle {
    // एब्स्ट्रैक्ट मेथड
    void start();
    
    // डिफ़ॉल्ट मेथड
    default void stop() {
        System.out.println("Vehicle stopping...");
    }
    
    // स्टेटिक मेथड
    static Vehicle createDefault() {
        return new Car();
    }
}

interface Electric {
    void charge();
    
    // डिफ़ॉल्ट मेथड - संघर्ष की संभावना
    default void ecoMode() {
        System.out.println("Eco mode on");
    }
}

class Car implements Vehicle, Electric {
    @Override
    public void start() {
        System.out.println("Car starting...");
    }
    
    @Override
    public void charge() {
        System.out.println("Charging battery...");
    }
    
    // दोनों इंटरफेस में ecoMode है - ओवरराइड अनिवार्य
    @Override
    public void ecoMode() {
        Vehicle.super.ecoMode(); // या Electric.super.ecoMode()
        System.out.println("Car specific eco mode");
    }
}

public class Test {
    public static void main(String[] args) {
        Vehicle v = Vehicle.createDefault(); // स्टेटिक मेथड
        v.start();
        v.stop(); // डिफ़ॉल्ट
        v.ecoMode(); // ओवरराइड किया गया
        
        if (v instanceof Electric) {
            ((Electric) v).charge();
        }
    }
}

आउटपुट

Car starting...
Vehicle stopping...
Eco mode on
Car specific eco mode
Charging battery...

Java 9+ अतिरिक्त संवर्द्धन

  • प्राइवेट मेथड्स: डिफ़ॉल्ट/स्टेटिक मेथड्स के लिए हेल्पर मेथड्स (कोड डुप्लीकेशन रोकने के लिए)
  • प्राइवेट स्टेटिक मेथड्स: स्टेटिक हेल्पर्स
interface AdvancedInterface {
    default void publicMethod() {
        helper(); // प्राइवेट मेथड कॉल
    }
    
    static void staticPublic() {
        staticHelper();
    }
    
    // Java 9+ प्राइवेट मेथड्स
    private void helper() {
        System.out.println("Private helper");
    }
    
    private static void staticHelper() {
        System.out.println("Private static helper");
    }
}

लाभ

संवर्द्धनलाभ
डिफ़ॉल्ट मेथड्सAPI विकास बिना ब्रेकिंग चेंज के, लैम्ब्डा सक्षम करना
स्टेटिक मेथड्सयूटिलिटी कोड इंटरफेस में, फैक्टरी मेथड्स
प्राइवेट मेथड्स (9+)कोड पुन: उपयोग, एनकैप्सुलेशन

सावधानियां

  • डिफ़ॉल्ट मेथड्स Object मेथड्स (equals, hashCode, toString) के लिए नहीं हो सकते
  • डिफ़ॉल्ट मेथड्स final या synchronized नहीं हो सकते
  • स्टेटिक मेथड्स इंटरफेस रेफरेंस से कॉल नहीं किए जा सकते
  • अत्यधिक डिफ़ॉल्ट मेथड्स इंटरफेस को "ब्लोट" कर सकते हैं

निष्कर्ष: Java 8 इंटरफेस संवर्द्धन (डिफ़ॉल्ट/स्टेटिक मेथड्स) और Java 9 प्राइवेट मेथड्स ने इंटरफेस को शक्तिशाली बना दिया है - वे अब केवल अनुबंध नहीं, बल्कि कार्यान्वयन साझाकरण और यूटिलिटी प्रदान कर सकते हैं, जबकि बैकवर्ड कम्पैटिबिलिटी बनाए रखते हैं।

  1. Java 9 में destroyForcibly() मेथड का महत्व Java 9 में destroyForcibly() मेथड का महत्व

    Java 9 ने Process क्लास में destroyForcibly() मेथड पेश किया जो प्रक्रियाओं को बलपूर्वक समाप्त करने का एक विश्वसनीय तरीका प्रदान करता है जब सामान्य destroy() (विनम्र समाप्ति) विफल हो जाता है या बहुत धीमा होता है। destroy() बनाम destroyForcibly() पहलूdestroy()destroyForcibly() सिग्नलSIGTERM

  1. - Java में नेस्टेड इंटरफेस (Nested Interface)

    हम किसी अन्य इंटरफेस या क्लास के अंदर एक इंटरफेस घोषित कर सकते हैं। ऐसे इंटरफेस को नेस्टेड इंटरफेस (Nested Interface) कहा जाता है। नेस्टेड इंटरफेस को नियंत्रित करने वाले निम्नलिखित नियम हैं: एक इंटरफेस के भीतर घोषित नेस्टेड इंटरफेस public होना चाहिए। एक क्लास के भीतर घोषित नेस्टेड इंटरफेस का कोई

  1. - Java में इंटरफेस (Interface)

    एक इंटरफेस Java में एक रेफरेंस टाइप है। यह एक क्लास के समान है। यह एब्स्ट्रैक्ट मेथड्स का एक संग्रह है। एक क्लास इंटरफेस को इम्प्लीमेंट करती है, जिससे इंटरफेस के एब्स्ट्रैक्ट मेथड्स विरासत में मिलते हैं। एब्स्ट्रैक्ट मेथड्स के साथ, एक इंटरफेस में कॉन्स्टेंट्स, डिफ़ॉल्ट मेथड्स, स्टेटिक मेथड्स, और न