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.
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
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.