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

Java में मार्कर या टैग्ड इंटरफेस क्या हैं?


इंटरफेस एक्सटेंड करने का सबसे आम उपयोग तब होता है जब पैरेंट इंटरफेस में कोई मेथड नहीं होता। उदाहरण के लिए, java.awt.event पैकेज में MouseListener इंटरफेस java.util.EventListener को एक्सटेंड करता है, जिसे इस प्रकार परिभाषित किया गया है:

उदाहरण

package java.util;
public interface EventListener {}

कोई मेथड न होने वाले इंटरफेस को टैगिंग इंटरफेस (tagging interface) या मार्कर इंटरफेस (marker interface) कहा जाता है। टैगिंग इंटरफेस के दो मूल डिजाइन उद्देश्य हैं:

1. सामान्य पैरेंट बनाना (Creates a common parent)

EventListener इंटरफेस की तरह, जिसे Java API में दर्जनों अन्य इंटरफेस द्वारा एक्सटेंड किया जाता है, आप इंटरफेस के एक समूह के बीच सामान्य पैरेंट बनाने के लिए टैगिंग इंटरफेस का उपयोग कर सकते हैं। उदाहरण के लिए, जब कोई इंटरफेस EventListener को एक्सटेंड करता है, तो JVM जानता है कि यह विशेष इंटरफेस इवेंट डेलीगेशन परिदृश्य में उपयोग किया जाएगा।

2. क्लास में डेटा टाइप जोड़ना (Adds a data type to a class)

यह वह स्थिति है जहां से "टैगिंग" शब्द आया है। एक क्लास जो टैगिंग इंटरफेस को इम्प्लीमेंट करती है, उसे कोई मेथड परिभाषित करने की आवश्यकता नहीं होती (क्योंकि इंटरफेस में कोई नहीं होता), लेकिन पॉलीमॉर्फिज्म के माध्यम से क्लास एक इंटरफेस टाइप बन जाती है।

प्रमुख मार्कर इंटरफेस (Java API में)

इंटरफेसपैकेजउद्देश्य
Serializablejava.ioक्लास को सीरियलाइज़ेबल मार्क करता है
Cloneablejava.langक्लोनिंग सक्षम करता है (Object.clone())
Remotejava.rmiरिमोट ऑब्जेक्ट मार्क करता है (RMI)
EventListenerjava.utilइवेंट लिस्टनर का मार्कर
RandomAccessjava.utilकुशल रैंडम एक्सेस का संकेत (ArrayList)
SingleThreadModeljavax.servletसिंगल थ्रेड मॉडल (निराशाजनक)

उदाहरण: Serializable

import java.io.*;

class Employee implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    int id;
    // transient फील्ड सीरियलाइज़ नहीं होगा
    transient String password;
}

// सीरियलाइजेशन
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("emp.ser"))) {
    oos.writeObject(new Employee("John", 1));
}

// डिसीरियलाइजेशन
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("emp.ser"))) {
    Employee emp = (Employee) ois.readObject();
}

उदाहरण: Cloneable

class Student implements Cloneable {
    String name;
    int age;
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); // Shallow copy
    }
}

// उपयोग
Student s1 = new Student("Alice", 20);
Student s2 = (Student) s1.clone(); // Cloneable न होने पर CloneNotSupportedException

कस्टम मार्कर इंटरफेस बनाना

// मार्कर इंटरफेस
interface Auditable {}

// उपयोग
class Transaction implements Auditable {
    String id;
    double amount;
}

// रनटाइम चेक
public void process(Object obj) {
    if (obj instanceof Auditable) {
        auditLog(obj);
    }
    // प्रोसेसिंग जारी रखें
}

मार्कर इंटरफेस vs एनोटेशन (आधुनिक विकल्प)

विशेषतामार्कर इंटरफेसएनोटेशन
पैरामीटर्सनहींहां (मान, डिफ़ॉल्ट, आदि)
मेटाडेटा समृद्धिकमउच्च
कंपाइल-टाइम प्रोसेसिंगनहींहां (एनोटेशन प्रोसेसर)
रनटाइम रिटेंशनहां (इंस्टेंसऑफ)कॉन्फिगरेबल
विरासतइम्प्लीमेंट्स के माध्यम से@Inherited के माध्यम से

एनोटेशन समकक्ष

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Auditable {}

@Auditable
class Transaction { ... }

// रनटाइम चेक
if (Transaction.class.isAnnotationPresent(Auditable.class)) { ... }

निष्कर्ष: मार्कर/टैगिंग इंटरफेस एक क्लास के लिए मेटाडेटा (टाइप टैग) जोड़ने का तरीका है बिना किसी मेथड कॉन्ट्रैक्ट के। आधुनिक Java में एनोटेशन अधिक लचीले और शक्तिशाली विकल्प हैं, लेकिन मार्कर इंटरफेस अभी भी व्यापक रूप से उपयोग किए जाते हैं (Serializable, Cloneable, आदि)।

  1. Java में StringIndexOutOfBoundsException क्या है? Java में StringIndexOutOfBoundsException क्या है?

    स्ट्रिंग्स का उपयोग Java में वर्णों के अनुक्रम को संग्रहीत करने के लिए किया जाता है, उन्हें ऑब्जेक्ट्स के रूप में माना जाता है। java.lang पैकेज का String क्लास एक स्ट्रिंग का प्रतिनिधित्व करता है। आप स्ट्रिंग को या तो new कीवर्ड का उपयोग करके (किसी अन्य ऑब्जेक्ट की तरह) बना सकते हैं, या लिटरल को मान

  1. Java में FocusListener इंटरफेस का महत्व क्या है? Java में FocusListener इंटरफेस का महत्व क्या है?

    FocusListener फोकस इवेंट्स तब उत्पन्न होते हैं जब भी कोई कंपोनेंट कीबोर्ड फोकस प्राप्त करता है या खो देता है। फोकस इवेंट्स को दर्शाने वाले ऑब्जेक्ट्स FocusEvent क्लास से बनाए जाते हैं। FocusEvent क्लास के लिए संबंधित लिसनर इंटरफेस FocusListener इंटरफेस है। FocusEvent के लिए प्रत्येक लिसनर FocusList

  1. Java में WindowListener इंटरफ़ेस का महत्व क्या है? Java में WindowListener इंटरफ़ेस का महत्व क्या है?

    वह क्लास जो WindowEvent को प्रोसेस करती है, उसे इस इंटरफ़ेस को लागू करने की आवश्यकता होती है और इस क्लास का एक ऑब्जेक्ट addWindowListener() विधि का उपयोग करके एक घटक के साथ पंजीकृत किया जा सकता है। WindowListener इंटरफ़ेस के तरीके WindowListener इंटरफ़ेस विंडो इवेंट को संभालने के लिए 7 तरीकों को पर