logo

Marker-Schnittstelle in Java

In diesem Abschnitt werden wir darüber diskutieren Marker-Schnittstelle in Java , es ist verwendet, eingebaut ( Serialisierbar , Klonbar , und Remote-Schnittstellen ) Und benutzerdefinierte Marker-Schnittstelle mit Beispielen.

Was ist eine Markerschnittstelle?

Ein Schnittstelle das keine Methoden, Felder und Konstanten enthält, wird als bezeichnet Marker-Schnittstelle . Mit anderen Worten, eine leere Schnittstelle wird als bezeichnet Marker-Schnittstelle oder Tag-Schnittstelle. Es liefert die Laufzeittypinformationen zu einem Objekt. Es ist der Grund, warum die JVM und Compiler verfügen über zusätzliche Informationen zu einem Objekt. Der Serialisierbar Und Klonbar Schnittstellen sind das Beispiel einer Markerschnittstelle. Kurz gesagt, es zeigt ein Signal oder einen Befehl an die JVM an.

Die Deklaration der Marker-Schnittstelle ist dieselbe wie die der Schnittstelle in Java, die Schnittstelle muss jedoch leer sein. Zum Beispiel:

 public interface Serializable { } 

Es gibt zwei Alternativen der Markerschnittstelle, die das gleiche Ergebnis wie die Markerschnittstelle liefern.

    Interne Flags:Es kann anstelle der Markierungsschnittstelle verwendet werden, um einen bestimmten Vorgang anzuzeigen.Anmerkungen:Seit Java 5, Markerschnittstellen entfallen . Anstelle einer Marker-Schnittstelle bietet Java 5 die Anmerkungen um die gleichen Ergebnisse zu erzielen. Es ermöglicht eine flexible Metadatenfähigkeit. Daher können wir durch Anwenden von Anmerkungen auf jede Klasse eine bestimmte Aktion ausführen.

Verwendungsmöglichkeiten der Marker-Schnittstelle

Die Markierungsschnittstelle wird als Tag verwendet, der den Java-Compiler durch eine Nachricht informiert, damit er der Klasse, die ihn implementiert, ein spezielles Verhalten hinzufügen kann. Java-Markerschnittstellen sind nützlich, wenn wir Informationen über die Klasse haben und sich diese Informationen nie ändern. In solchen Fällen verwenden wir Markerschnittstellendarstellung, um dieselben darzustellen. Durch die Implementierung einer leeren Schnittstelle wird der Compiler angewiesen, einige Operationen auszuführen.

Es wird verwendet, um den Code logisch zu unterteilen und ist eine gute Möglichkeit, Code zu kategorisieren. Es ist nützlicher für die Entwicklung von APIs und in Frameworks wie Spring.

Integrierte Marker-Schnittstelle

In Java Integrierte Markierungsschnittstellen sind die Schnittstellen, die bereits im JDK vorhanden und einsatzbereit sind. Es gibt viele integrierte Marker-Schnittstellen, einige davon sind:

Auswahlsortierung in Java
  • Klonbare Schnittstelle
  • Serialisierbare Schnittstelle
  • Remote-Schnittstelle

Lassen Sie uns dies einzeln im Detail besprechen.

Klonbare Schnittstelle

Reinigbare Schnittstelle In Java gehört auch eine Marker-Schnittstelle dazu java.lang Paket. Es generiert eine Replik (Kopie) eines Objekts mit einem anderen Namen. Wir können die Schnittstelle in der Klasse implementieren, deren Klassenobjekt geklont werden soll. Es zeigt an Klon() Methode der Object-Klasse. Wenn wir die Cloneable-Schnittstelle nicht in der Klasse implementieren und die clone()-Methode aufrufen, wird das ausgelöst ClassNotSupportedException.

Beachten Sie, dass eine Klasse, die die Cloneable-Schnittstelle implementiert, die clone()-Methode mit einer öffentlichen Methode überschreiben muss. Sehen wir uns ein Beispiel an.

Produkt.java

 import java.util.Scanner; public class Product implements Cloneable { int pid; String pname; double pcost; //Product class constructor public Product (int pid, String pname, double pcost) { this.pid = pid; this.pname = pname; this.pcost = pcost; } //method that prints the detail on the console public void showDetail() { System.out.println('Product ID: '+pid); System.out.println('Product Name: '+pname); System.out.println('Product Cost: '+pcost); } public static void main (String args[]) throws CloneNotSupportedException { //reading values of the product from the user Scanner sc = new Scanner(System.in); System.out.print('Enter product ID: '); int pid = sc.nextInt(); System.out.print('Enter product name: '); String pname = sc.next(); System.out.print('Enter product Cost: '); double pcost = sc.nextDouble(); System.out.println('-------Product Detail--------'); Product p1 = new Product(pid, pname, pcost); //cloning the object of the Product class using the clone() method Product p2 = (Product) p1.clone(); //invoking the method to print detail p2.showDetail(); } } 

Ausgabe:

 Enter product ID: 139872 Enter product name: Printer Enter product Cost: 3459.67 -------Product Detail-------- Product ID: 139872 Product Name: Printer Product Cost: 3459.67 

Serialisierbare Schnittstelle

Es handelt sich um eine Markierungsschnittstelle in Java, die in definiert ist java.io Paket. Wenn wir die Klasse serialisierbar machen wollen, müssen wir das implementieren Serialisierbar Schnittstelle. Wenn eine Klasse die Serializable-Schnittstelle implementiert, können wir den Status eines Objekts dieser Klasse serialisieren oder deserialisieren.

Serialisierung (Konvertieren eines Objekts in einen Bytestream) ist ein Mechanismus, bei dem Der Objektstatus wird aus dem Speicher gelesen und in eine Datei oder Datenbank geschrieben . Deserialisierung (Konvertieren eines Bytestroms in ein Objekt) ist das Gegenteil von Serialisierung Objektstatus aus einer Datei oder Datenbank lesen und zurück in den Speicher schreiben wird Deserialisierung eines Objekts genannt.

Sortierung zusammenführen
Marker-Schnittstelle in Java

Serialisierung (Schreiben) kann mit erreicht werden ObjectOutputStream Klasse und Deserialisierung (Lesen) können mit erreicht werden ObjectInputStream Klasse.

Sehen wir uns ein Beispiel für Serialisierung und Deserialisierung an.

Städte in Australien

Beispiel für Serialisierung

Employee.java

 import java.io.Serializable; public class Employee implements Serializable { int empid; String empname; public Employee(int empid, String empname) { this.empid = empid; this.empname = empname; } } 

SerializationExample.java

 import java.io.*; class SerializationExample { public static void main(String args[]) { try { //Creating the object Employee emp =new Employee(1187345,'Andrew'); //Creating stream and writing the object FileOutputStream fout=new FileOutputStream('employee data.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(emp); out.flush(); //closing the stream out.close(); System.out.println('Data has been read from the file.'); } catch(Exception e) { e.printStackTrace(); } } } 

Ausgabe:

 Data has been read from the file. 

Beispiel für Deserialisierung

Lassen Sie uns den Objektstatus deserialisieren.

DeserializationExample.java

 import java.io.*; class DeserializationExample { public static void main(String args[]) { try { //Creating stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('employee data.txt')); Employee emp=(Employee)in.readObject(); //printing the data of the serialized object System.out.println(emp.empid+' '+emp.empname); //closing the stream in.close(); } catch(Exception e) { e.printStackTrace(); } } } 

Ausgabe:

 1187345 Andrew 

Remote-Schnittstelle

Remote-Schnittstelle ist eine Markierungsschnittstelle, die dazu gehört java.rmi Paket. Es markiert ein Objekt als entfernt, auf das von einem anderen Computer (Host) aus zugegriffen werden kann. Wir müssen die Remote-Schnittstelle implementieren, wenn wir ein Objekt als Remote-Objekt erstellen möchten. Es identifiziert die Schnittstellen, deren Methoden von einer nicht lokalen JVM aufgerufen werden können. Jedes Remote-Objekt muss die Schnittstelle direkt oder indirekt implementieren.

Definieren wir eine Remote-Schnittstelle und implementieren sie in einem Java-Programm.

Definieren der Remote-Schnittstelle

 import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; } 

Implementieren Sie die Remote-Schnittstelle

Es gibt zwei Möglichkeiten, die Remote-Schnittstelle zu implementieren:

  • Durch Erweiterung der UnicastRemoteObject-Klasse
  • Durch Verwendung der exportObject()-Methode der UnicastRemoteObject-Klasse

AddAllRemote.java

 import java.rmi.*; import java.rmi.server.*; public class AddAllRemote extends UnicastRemoteObject implements Adder { AddAllRemote()throws RemoteException { super(); } public int add(int r, int s) { return r+s; } 

Erstellen und starten Sie die Remote-Anwendung

Server.java

 import java.rmi.*; import java.rmi.registry.*; public class Server { public static void main(String args[]) { try { AddAll stub=new AddAllRemote(); Naming.rebind('rmi://localhost:5000/sak',stub); } catch(Exception e) { System.out.println(e); } } } 

Erstellen und starten Sie die Clientanwendung

Client.java

jframe
 import java.rmi.*; public class Client { public static void main(String args[]) { try { AddAll stub=(AddAll)Naming.lookup('rmi://localhost:5000/sak'); System.out.println(stub.add(29,18)); } catch(Exception e) { } } } 

Benutzerdefinierte Marker-Schnittstelle

Neben der integrierten Marker-Schnittstelle ermöglicht uns Java auch die Erstellung einer eigenen Marker-Schnittstelle. Sehen wir uns ein Beispiel an.

CustomMarkerInterfaceExample.java

 //custom marker interface interface Car { } //custom marker interface interface Engine { } //class that implements the Car marker interface class Vehicle implements Car { static void isVehicle() { System.out.println('Car is a vehicle.'); } } //class that implements the Engine marker interface class Status implements Engine { static void isWorking() { System.out.println('Yes, engine is working.'); } } //main class public class CustomMarkerInterfaceExample { public static void main(String args[]) { //invoking the methods of the class Vehicle.isVehicle(); Status.isWorking(); } } 

Ausgabe:

 Car is a vehicle. Yes, engine is working.